サーバのお引越しを予定していましたが、新しいサーバを頂けなくなったので今動いてるサーバでがんばって言われたみゅみゅです。
今動いているサーバはHDDが一台しかなく、HDDが壊れたら終了です。
せめてミラーでも組まないと精神衛生上よくない上に夜も熟睡できません。
そんなわけで稼働中の単一HDDのサーバをraid1のミラーに変更したいと思います。
前回 raid1を構築しましたので、最終的には最後の図のようになればいいのかなぁ~ と
現在のHDDの状態
現在のHDDの構成を確認します。
root@mdtest:~# parted -l
モデル: ATA VBOX HARDDISK (scsi)
ディスク /dev/sda: 8590MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
番号 開始 終了 サイズ タイプ ファイルシステム フラグ
1 1049kB 256MB 255MB primary ext2 boot
2 257MB 8589MB 8332MB extended
5 257MB 8589MB 8332MB logical lvm
モデル: Linux device-mapper (linear) (dm)
ディスク /dev/mapper/mdtest--vg-swap_1: 533MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: loop
番号 開始 終了 サイズ ファイルシステム フラグ
1 0.00B 533MB 533MB linux-swap(v1)
モデル: Linux device-mapper (linear) (dm)
ディスク /dev/mapper/mdtest--vg-root: 7764MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: loop
番号 開始 終了 サイズ ファイルシステム フラグ
1 0.00B 7764MB 7764MB ext4
root@mdtest:~# df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/mdtest--vg-root 7331536 1284088 5651980 19% /
none 4 0 4 0% /sys/fs/cgroup
udev 239576 4 239572 1% /dev
tmpfs 50152 472 49680 1% /run
none 5120 0 5120 0% /run/lock
none 250748 0 250748 0% /run/shm
none 102400 0 102400 0% /run/user
/dev/sda1 240972 38103 190428 17% /boot
デバイスは3つ
- /dev/sda (物理)
- /dev/mapper/mdtest--vg-swap_1 (LVM)
- /dev/mapper/mdtest--vg-root (LVM)
/dev/sda1は /bootにマウントされています。
LVMの状態を確認
root@mdtest:~# pvdisplay
--- Physical volume ---
PV Name /dev/sda5
VG Name mdtest-vg
PV Size 7.76 GiB / not usable 2.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 1986
Free PE 8
Allocated PE 1978
PV UUID PfeUP8-vYhu-d2Gq-7VDz-ijQ8-eV58-AFN2k6
root@mdtest:~# vgdisplay
--- Volume group ---
VG Name mdtest-vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
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 7.76 GiB
PE Size 4.00 MiB
Total PE 1986
Alloc PE / Size 1978 / 7.73 GiB
Free PE / Size 8 / 32.00 MiB
VG UUID xMRo8d-aZYP-wWWB-qtDF-6ilb-4AkC-Xow59q
root@mdtest:~# lvdisplay
--- Logical volume ---
LV Path /dev/mdtest-vg/root
LV Name root
VG Name mdtest-vg
LV UUID 8CuLA2-erMg-Y893-V2k6-SKzP-tuXg-jrqltn
LV Write Access read/write
LV Creation host, time mdtest, 2015-05-21 12:47:15 +0900
LV Status available
# open 1
LV Size 7.23 GiB
Current LE 1851
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
--- Logical volume ---
LV Path /dev/mdtest-vg/swap_1
LV Name swap_1
VG Name mdtest-vg
LV UUID 53OCrI-0NZ6-NDcJ-gHEF-WmWO-ZDG1-7nYtt8
LV Write Access read/write
LV Creation host, time mdtest, 2015-05-21 12:47:15 +0900
LV Status available
# open 2
LV Size 508.00 MiB
Current LE 127
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:1
いつもの3つのコマンドです。
【/dev/sda5】から【mdtest-vg】を作りそれぞれrootとswapの論理デバイスを構築です。
。。。よくわからないので図を書いてみると
前回の図の使いまわしです。
RAIDデバイスはないのでこんな感じです。
これにまずはHDDを一個取り付けてみましょう。
取り付けて起動してみると
root@mdtest:~# dmesg | grep sdb
[ 1.581832] sd 3:0:0:0: [sdb] 16777216 512-byte logical blocks: (8.58 GB/8.00 GiB)
[ 1.583935] sd 3:0:0:0: [sdb] Write Protect is off
[ 1.584693] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[ 1.585423] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 1.587692] sdb: unknown partition table
[ 1.588392] sd 3:0:0:0: [sdb] Attached SCSI disk
なんか[unknown partition table]でsdbが認識
まず、こいつをraid1の片肺として認識させます。
・・・RAIDを作るのにmdadmがない言われたのでまずはmdadmのインストール
root@mdtest:~# apt-get install mdadm
接続したHDDのサイズが2TB以下なのでラベルを【msdos】で設定
(2TB以上ならラベル名は【gpt】です)
root@mdtest:~# parted /dev/sdb
GNU Parted 2.3
/dev/sdb を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted) print
エラー: /dev/sdb: ディスクラベルが認識できません。
(parted) mklabel msdos
(parted) print
モデル: ATA VBOX HARDDISK (scsi)
ディスク /dev/sdb: 8590MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
番号 開始 終了 サイズ タイプ ファイルシステム フラグ
(parted) mkpart
パーティションの種類? primary/プライマリ/extended/拡張? primary
ファイルシステムの種類? [ext2]?
開始? 1049kB
終了? 8589MB
(parted) set 1 raid on
(parted) set 1 boot on
(parted) print
モデル: ATA VBOX HARDDISK (scsi)
ディスク /dev/sdb: 8590MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
番号 開始 終了 サイズ タイプ ファイルシステム フラグ
1 1049kB 8590MB 8589MB primary boot, raid
(parted) q
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。
サイズは前回のコピペです。
raidやらbootのフラグを忘れないでください。
次にraid1を行うので、mdを作って先ほど作った/dev/sdb1をぶち込みます。
root@mdtest:~# mdadm -C /dev/md0 -l1 -n2 /dev/sdb1 missing
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array?
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
root@mdtest:~#
なんか注意を受けたけど気にせずに
-l1 → raid 1
-n2 → HDD2個使うよ
missing → 二つ使うって言ったけ一つしか用意してないんだー だからブランクにしといて
できたと思われる/dev/md0を確認
root@mdtest:~# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu May 21 15:47:58 2015
Raid Level : raid1
Array Size : 8383424 (8.00 GiB 8.58 GB)
Used Dev Size : 8383424 (8.00 GiB 8.58 GB)
Raid Devices : 2
Total Devices : 1
Persistence : Superblock is persistent
Update Time : Thu May 21 15:47:58 2015
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0
Name : mdtest:0 (local to host mdtest)
UUID : 78f1d07c:f84952e0:44ebf35c:aa20c469
Events : 0
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 0 0 1 removed
なんとなく出来てるっぽい
/dev/md0にパーティションを作ってみる
root@mdtest:~# parted /dev/md0
GNU Parted 2.3
/dev/sdb を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted) print
エラー: /dev/sdb: ディスクラベルが認識できません。
(parted) mklabel msdos
(parted) print
モデル: Linux Software RAID Array (md)
ディスク /dev/md0: 8585MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
番号 開始 終了 サイズ タイプ ファイルシステム フラグ
(parted) mkpart
パーティションの種類? primary/プライマリ/extended/拡張? primary
ファイルシステムの種類? [ext2]? ext2
開始? 2048s
終了? 255MB
(parted) print
モデル: Linux Software RAID Array (md)
ディスク /dev/md0: 8585MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
番号 開始 終了 サイズ タイプ ファイルシステム フラグ
1 1049kB 255MB 254MB primary
(parted) mkfs 1 ext2
警告: ファイルシステムに対して parted による操作(mkfs)を行おうとしています。
parted のファイルシステム操作コードは、e2fsprogs のようなファイルシステム専
用のものほど堅固に作られていません。可能なかぎり parted をパーティションテー
ブルの操作だけに用いることをお勧めします。ほとんどのファイルシステムに
対するほとんどの操作は今後のリリースで削除される予定です。
警告: いま存在しているファイルシステムは破壊され、このパーティションの全データが失われます。続行しますか?
はい(Y)/Yes/いいえ(N)/No? y
パーティション番号? 1
ファイルシステムの種類? [ext2]? ext2
(parted) print
モデル: Linux Software RAID Array (md)
ディスク /dev/md0: 8585MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
番号 開始 終了 サイズ タイプ ファイルシステム フラグ
1 1049kB 255MB 254MB primary ext2
(parted) mkpart
パーティションの種類? primary/プライマリ/extended/拡張? extended
開始? 255MB
終了? -1s
(parted) print
モデル: Linux Software RAID Array (md)
ディスク /dev/md0: 8585MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
番号 開始 終了 サイズ タイプ ファイルシステム フラグ
1 1049kB 255MB 254MB primary ext2
2 255MB 8585MB 8330MB extended lba
(parted) set 2 lba off
(parted) print
モデル: Linux Software RAID Array (md)
ディスク /dev/md0: 8585MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
番号 開始 終了 サイズ タイプ ファイルシステム フラグ
1 1049kB 255MB 254MB primary ext2
2 255MB 8585MB 8330MB extended
(parted) mkpart logical 499712s 16766847s
(parted) unit MB
(parted) print
モデル: Linux Software RAID Array (md)
ディスク /dev/md0: 8585MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
番号 開始 終了 サイズ タイプ ファイルシステム フラグ
1 1.05MB 255MB 254MB primary ext2
2 255MB 8585MB 8330MB extended
5 256MB 8585MB 8329MB logical
(parted) set 5 lvm on
(parted) print
モデル: Linux Software RAID Array (md)
ディスク /dev/md0: 8585MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
番号 開始 終了 サイズ タイプ ファイルシステム フラグ
1 1.05MB 255MB 254MB primary ext2
2 255MB 8585MB 8330MB extended
5 256MB 8585MB 8329MB logical lvm
「警告: 操作の結果できるパーティションはアライメントが正しくないためにパフォーマンスがでません。」
こんなメッセージが色々でてきてめんどくさかったー
調べてみたら、パーティションの開始を2048シリンダーで割り切れる数なら怒られないということで、途中で
unit s ← printの表示をシリンダー数に変更
これでシリンダー単位で計算してパーティションを作りました。
(なので無駄が多いです!)
mdにパーティションを切りましたのでデバイスが出来てるはず
root@mdtest:~# ls -al /dev/md*
brw-rw---- 1 root disk 9, 0 5月 21 16:39 /dev/md0
brw-rw---- 1 root disk 259, 0 5月 21 16:13 /dev/md0p1
brw-rw---- 1 root disk 259, 2 5月 21 16:31 /dev/md0p2
brw-rw---- 1 root disk 259, 3 5月 21 16:31 /dev/md0p5
デバイスが出来てました。
念の為、bootに使うところをext2でファイルシステム作成
root@mdtest:~# mkfs.ext2 /dev/md0p1
/bootの中身をすべてコピー
root@mdtest:~# cd /
root@mdtest:/# mkdir newboot
root@mdtest:/# mount /dev/md0p1 newboot
root@mdtest:/# cp -dpr /boot/* newboot/
/bootのマウント先をマウントを新しく作った/dev/md0p1に変更
root@mdtest:/# tune2fs -l /dev/md0p1 | grep UUID
Filesystem UUID: 9a08b33b-aba8-4b9d-b6ed-8423117a76d2
root@mdtest:/# vi /etc/fstab
/bootのマウントポイントが変わったのを確認
root@mdtest:/# umount newboot
root@mdtest:/# umount /boot
root@mdtest:/# rmdir newboot
root@mdtest:/# mount /boot
root@mdtest:/# df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/mdtest--vg-root 7331536 1291548 5644520 19% /
none 4 0 4 0% /sys/fs/cgroup
udev 239576 8 239568 1% /dev
tmpfs 50152 504 49648 2% /run
none 5120 0 5120 0% /run/lock
none 250748 0 250748 0% /run/shm
none 102400 0 102400 0% /run/user
/dev/md0p1 239979 38492 189097 17% /boot
新しいHDDにgrabを入れて、古いHDDのbootフラグを落とします。
root@mdtest:/# grub-install /dev/sdb
Installing for i386-pc platform.
grub-install: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
grub-install: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
Installation finished. No error reported.
root@mdtest:/# update-grub
Generating grub configuration file ...
Linux イメージを見つけました: /boot/vmlinuz-3.16.0-30-generic
Found initrd image: /boot/initrd.img-3.16.0-30-generic
/usr/sbin/grub-probe: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
/usr/sbin/grub-probe: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
/usr/sbin/grub-probe: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
/usr/sbin/grub-probe: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
/usr/sbin/grub-probe: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
/usr/sbin/grub-probe: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
Found memtest86+ image: /memtest86+.elf
Found memtest86+ image: /memtest86+.bin
完了
root@mdtest:/# parted /dev/sda set 1 boot off
これでrebootを行って立ち上がればbootはOKです。
ただし、私が使ってるのはOracle Virtual Boxでbootフラグを落としても、一番目のHDDを見に行って起動するそうです。
(一番目のHDDに起動の設定がなければ、起動できませんってことで終了)
なので、立ち上がるときに【F12】を押して
こんな画面を出して、2番目のHDDを選択(2を押す)
これで、2番目のHDDから起動を開始します。
リブート後
root@mdtest:~# ls -al /dev/md*
brw-rw---- 1 root disk 9, 127 5月 21 17:14 /dev/md127
brw-rw---- 1 root disk 259, 0 5月 21 17:14 /dev/md127p1
brw-rw---- 1 root disk 259, 1 5月 21 17:14 /dev/md127p2
brw-rw---- 1 root disk 259, 2 5月 21 17:14 /dev/md127p5
/dev/md:
合計 0
drwxr-xr-x 2 root root 120 5月 21 17:14 .
drwxr-xr-x 17 root root 4280 5月 21 17:14 ..
lrwxrwxrwx 1 root root 8 5月 21 17:14 mdtest:0 -> ../md127
lrwxrwxrwx 1 root root 10 5月 21 17:14 mdtest:0p1 -> ../md127p1
lrwxrwxrwx 1 root root 10 5月 21 17:14 mdtest:0p2 -> ../md127p2
lrwxrwxrwx 1 root root 10 5月 21 17:14 mdtest:0p5 -> ../md127p5
なんか色々と名前が書き換わってる。。。
(md0 → md127 あとへんなリンク貼られてる。。。)
root@mdtest:~# df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/mdtest--vg-root 7331536 1292032 5644036 19% /
none 4 0 4 0% /sys/fs/cgroup
udev 239384 4 239380 1% /dev
tmpfs 50152 504 49648 2% /run
none 5120 0 5120 0% /run/lock
none 250748 0 250748 0% /run/shm
none 102400 0 102400 0% /run/user
/dev/md127p1 239979 38497 189092 17% /boot
とりあえず図で書くとここまでできました。
次は残りの部分を作成していきたいと思います。