(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