このブログを検索

2015-04-13

RAIDの再構築(LVMあり→LVMなし)

(2017/11/13追記。この記事、実施の半年後にメモをコピペした記事だけど、なんか冒頭で言ってることとやってることが違うかも。最早覚えてないのでこの記事は参考にしないでください。自分用のメモとして一応残しておきます。)

半年くらい前の出来事だが、RAID on LVM → RAID を試したのでその手順をメモ。
書き溜めていたもののコピーなので細かいところは間違えているかも。

今回やることは、、、

HDD2台でRAID1構成をしていたが1台死んでしまった。
そこで、再構成するついでに、管理が面倒な上に使っていなかったLVMを解除したい。

HDD1 LVMあり
HDD2 購入直後

ここから

HDD1 RAID1(LVMなし)
HDD2 RAID1(LVMなし)
という構成にしたい

HDD2パーティショニング
HDD1→HDD2ファイルコピー
HDD1パーティショニング(初期化)
HDD2をメインにHDD1と同期
ともっていきたい

参考:
http://complete.ddo.jp/cent5/lvm2raid.html



CDドライブからGPartedを起動
/dev/sdbを開く
パーティションテーブルGPTを作成
Excelの通りにパーティショニング
bootはどうやらGrubであれば不要らしいので今回作らない
(2017/07/03 Excelの内容が不明だったので追加。ただ時間が経ってるので中身がこれであってるか不明)

現在の状態を表示
$ sudo parted -l
[sudo] password for default:
Model: ATA WDC WD20EARS-00M (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name  Flags
 1      1049kB  2097kB  1049kB                  grub  bios_grub
 2      2097kB  271MB   268MB   ext4            boot  msftdata
 4      271MB   1997GB  1997GB                  data  lvm
 3      1997GB  2000GB  3221MB  linux-swap(v1)  swap


Model: ATA ST2000DM001-1ER1 (scsi)
Disk /dev/sdb: 2000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system     Name  Flags
 1      1049kB  2097kB  1049kB                        bios_grub
 4      2097kB  1997GB  1997GB                        raid
 3      1997GB  1997GB  1049kB                        msftdata
 2      1997GB  2000GB  3221MB  linux-swap(v1)

Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/vg0-lv1: 1977GB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End     Size    File system  Flags
 1      0.00B  1977GB  1977GB  ext4


Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/vg0-lv0: 20.0GB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End     Size    File system  Flags
 1      0.00B  20.0GB  20.0GB  ext4

$ sudo vgdisplay -v
    Finding all volume groups
    Finding volume group "vg0"
  --- Volume group ---
  VG Name               vg0
  System ID          
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               1.82 TiB
  PE Size               4.00 MiB
  Total PE              476074
  Alloc PE / Size       476074 / 1.82 TiB
  Free  PE / Size       0 / 0
  VG UUID               QFEMD8-l0bT-Jl0s-Vzqr-7723-jRGH-VjU5do
 
  --- Logical volume ---
  LV Path                /dev/vg0/lv0
  LV Name                lv0
  VG Name                vg0
  LV UUID                P9B0Kf-uAS9-a80Y-X9ef-8qYx-I2pY-4YTyZM
  LV Write Access        read/write
  LV Creation host, time ,
  LV Status              available
  # open                 1
  LV Size                18.62 GiB
  Current LE             4768
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0
 
  --- Logical volume ---
  LV Path                /dev/vg0/lv1
  LV Name                lv1
  VG Name                vg0
  LV UUID                5YP3eC-1QyR-JqMf-0jld-Le0H-axrL-Kk0i1a
  LV Write Access        read/write
  LV Creation host, time ,
  LV Status              available
  # open                 1
  LV Size                1.80 TiB
  Current LE             471306
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:1
 
  --- Physical volumes ---
  PV Name               /dev/sda4  
  PV UUID               9n3zGy-kqnn-w8wo-cvE7-OdnV-Du8C-34ZoW1
  PV Status             allocatable
  Total PE / Free PE    476074 / 0


$ df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv0   19G  2.8G   15G  16% /
none                 4.0K     0  4.0K   0% /sys/fs/cgroup
udev                 982M  4.0K  982M   1% /dev
tmpfs                199M  664K  198M   1% /run
none                 5.0M     0  5.0M   0% /run/lock
none                 993M     0  993M   0% /run/shm
none                 100M     0  100M   0% /run/user
/dev/sda2            240M   63M  161M  29% /boot
/dev/mapper/vg0-lv1  1.8T   63G  1.7T   4% /home


$ sudo aptitude install mdadm

縮退モードでRAID-ARRAY作成
$ sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb4

$ cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sdb4[1]
      1950234432 blocks super 1.2 [2/1] [_U]

$ sudo sh -c "mdadm --examine --scan >> /etc/mdadm/mdadm.conf"


PV作成
$ sudo pvcreate /dev/md0
  Physical volume "/dev/md0" successfully created
VGにPVを追加
$ sudo vgextend vg0 /dev/md0
  Volume group "vg0" successfully extended
外したいPVのデータを他のPV(/dev/md0)に移動
$ sudo pvmove /dev/sda4
  /dev/sda4: Moved: 99.9%
  /dev/sda4: Moved: 99.9%
  /dev/sda4: Moved: 100.0%
  /dev/sda4: no pvmove in progress - already finished or aborted.



initrd 作成
RAID1 を含む initrd を作成します。

$ uname -r
3.13.0-35-generic
$ sudo mkinitramfs -o /boot/initrd.img-3.13.0-35-generic 3.13.0-35-generic

bootパーティションのデータをrootパーティションにコピー
$ sudo cp -p -r /boot /home/.
$ sudo umount /boot
$ sudo cp -p -r /home/boot/* /boot/.

$ sudo vim /etc/fstab
proc            /proc           proc    nodev,noexec,nosuid 0       0
/dev/mapper/vg0-lv0 /               ext4    errors=remount-ro 0       1
# /boot was on /dev/sda2 during installation
UUID=56c3ebdd-7d85-421b-888a-217b6a500ab1 /boot           ext4    defaults        0       2
/dev/mapper/vg0-lv1 /home           ext4    defaults        0       2
# swap was on /dev/sda3 during installation
UUID=25bc96ac-e59d-4061-ae56-201ea16bc663 none            swap    sw              0       0

次のように変更する

proc            /proc           proc    nodev,noexec,nosuid 0       0
/dev/mapper/vg0-lv0 /               ext4    errors=remount-ro 0       1
# /boot was on /dev/sda2 during installation
#UUID=56c3ebdd-7d85-421b-888a-217b6a500ab1 /boot           ext4    defaults        0       2
/dev/mapper/vg0-lv1 /home           ext4    defaults        0       2
# swap was on /dev/sda3 during installation
UUID=25bc96ac-e59d-4061-ae56-201ea16bc663 none            swap    sw              0       0


$ sudo grub-install /dev/sda

$ sudo shutdown -h 0
そして電源ON

"no bootable device"エラーが出てGrubすら起動しない。
以前もあったので同じ対処をする。(どうして戻ったのかは不明)

http://www.ubuntulinux.jp/download/ja-remixから"ubuntu-ja-14.04-desktop-amd64.iso"をダウンロードしてCDに焼く。 ディスクを入れて起動する。
"Ubuntuを試す"で起動してDash→検索"terminal"
$ sudo fdisk /dev/sda
[GPTをサポートしません・・・]とか言われるけど無視する。
とりあえず状態を確認
: p
デバイス ブート 始点 終点 ブロック ID システム /dev/sda1 1 39070・・・ 19535・・・ ee GPT
パーティションをアクティブにする
"a"→"1"→"w"
さらにエラーが出るが無視する
$ sudo shutdown -h 0

LiveCDを抜いて再起動
起動はするが、起動時に"Error: diskfilter writes are not supported"
というエラーが出ている。RAID+LVMの組み合わせで出る模様。
このままでも問題はないらしいが一応修正する。
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1274320/comments/34

/etc/grub.d/00_headerのrecordfailセクションを書き換える。
もともと
if [ "$quick_boot" = 1 ]; then
    cat <<EOF
function recordfail {
  set recordfail=1
EOF
    FS="$(grub-probe --target=fs "${grubdir}")"
    case "$FS" in
      btrfs | cpiofs | newc | odc | romfs | squash4 | tarfs | zfs)
        cat <<EOF
  # GRUB lacks write support for $FS, so recordfail support is disabled.
EOF
        ;;
      *)
        cat <<EOF
  if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env recordfail; fi; fi
EOF
    esac
    cat <<EOF
}
となっている部分を
if [ "$quick_boot" = 1 ]; then
    cat <<EOF
function recordfail {
  set recordfail=1
EOF
# added begin
    GRUBMDDEVICE="$(grub-probe --target=disk "${grubdir}")"
    GRUBLVMDEVICE="$(grub-probe --target=disk "${grubdir}")"
    if echo "$GRUBMDDEVICE" | grep "/dev/md" > /dev/null; then
        cat <<EOF
  # GRUB lacks write support for $GRUBMDDEVICE, so recordfail support is disabled.
EOF
    elif echo "$GRUBLVMDEVICE" | grep "/dev/mapper" > /dev/null; then
        cat <<EOF
  # GRUB lacks write support for $GRUBLVMDEVICE, so recordfail support is disabled.
EOF
    else
# added end
        FS="$(grub-probe --target=fs "${grubdir}")"
        case "$FS" in
          btrfs | cpiofs | newc | odc | romfs | squash4 | tarfs | zfs)
            cat <<EOF
  # GRUB lacks write support for $FS, so recordfail support is disabled.
EOF
          ;;
          *)
            cat <<EOF
  if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env recordfail; fi; fi
EOF
        esac
# added begin
    fi
# added end
    cat <<EOF
}
に変更する。



$ sudo update-grub
$ sudo shutdown -h 0

再起動して起動できることを確認

$ sudo pvscan
[sudo] password for default:
  PV /dev/sda4   VG vg0   lvm2 [1.82 TiB / 1.82 TiB free]
  PV /dev/md0    VG vg0   lvm2 [1.82 TiB / 228.00 MiB free]
  Total: 2 [3.63 TiB] / in use: 2 [3.63 TiB] / in no VG: 0 [0   ]

$ sudo vgreduce vg0 /dev/sda4
  Removed "/dev/sda4" from volume group "vg0"

$ sudo pvremove /dev/sda4
  Labels on physical volume "/dev/sda4" successfully wiped

$ sudo shutdown -h 0



GPartedで/dev/sdaのbootパーティションと旧LVMパーティションを削除し、
/dev/sdbと同じ構成にする
前のパーティションのデータが残っているようだが無視する

ここで再起動するとまた
"no bootable device"エラーが出た。
再びUbuntu LiveCDでフラグを立てる操作をする


$ sudo parted /dev/sda
GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print                                                          
Model: ATA WDC WD20EARS-00M (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name  Flags
 1      1049kB  2097kB  1049kB                  grub  bios_grub
 4      2097kB  1997GB  1997GB  ext4                  msftdata
 3      1997GB  1997GB  1049kB                        msftdata
 2      1997GB  2000GB  3221MB  linux-swap(v1)

(parted) set 4 raid on                                                  
(parted) print                                                          
Model: ATA WDC WD20EARS-00M (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name  Flags
 1      1049kB  2097kB  1049kB                  grub  bios_grub
 4      2097kB  1997GB  1997GB  ext4                  raid
 3      1997GB  1997GB  1049kB                        msftdata
 2      1997GB  2000GB  3221MB  linux-swap(v1)

(parted) quit

$ sudo mdadm --manage --add /dev/md0 /dev/sda4
mdadm: added /dev/sda4

$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sda4[2] sdb4[1]
      1950234432 blocks super 1.2 [2/1] [_U]
      [>....................]  recovery =  0.1% (3629504/1950234432) finish=329.3min speed=98504K/sec
   
unused devices: <none>

要否不明だけど一応mdadm.confを再設定

$ sudo vim /etc/mdadm/mdadm.conf
末尾の"ARRAY"から始まる一行を削除

$ sudo sh -c "mdadm --examine --scan >> /etc/mdadm/mdadm.conf"

$ sudo grub-install /dev/sdb

cat /proc/mdstatが100%になったら作業完了

$ sudo shutdown -h 0

再起動して最終的な起動確認

以上で完了



ただこれだと、partedした時にRAID ARRAYにしたパーティションのFile systemが以前のext4のまま消えない。
後日これを解消した。
手順は
1. mdadmでmd0にfailコマンドを実行
2. mdadmでmd0から/dev/sdaを除去
3. GParted起動
4. パーティションを"cleared"でフォーマット ※パーティション情報を初期化するものらしい
5. Ubuntu LiveCD起動
6. a→1→wを実施する
7. mdadmでmd0に/dev/sdaを再度追加
8. 同期を待つ
で成功した
※もしかしたら4のあと、一度"no bootable device"を見ないといけないかも
 一度、エラーを確認せずに続けてやったら効果がなかった



その他参考にしたと思われるURL
http://xelalko.blogspot.jp/2010/08/ubuntu910-nas-on-raid15.html
http://xelalko.blogspot.jp/2010/08/ubuntu910-nas-on-raid14.html
http://www.linuxmania.jp/raid_md_grub.html
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/a060raid1.html
http://blog.seishiono.net/entry/2014/05/03/223948
http://www.maruko2.com/mw/CentOS/LVM%E3%81%AE%E8%B5%B7%E5%8B%95%E4%B8%AD%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%82%92SSD%E3%81%AB%E8%A4%87%E8%A3%BD%E3%81%97%E4%BA%A4%E6%8F%9B%E3%81%99%E3%82%8B
http://ubuntu.hatenablog.jp/entry/20101228/1293536177
http://qiita.com/kudotty/items/264d255fdffffe9abc64
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1274320/comments/34