RAID1 のシステムをオンラインで交換
注意
- linuxです
- mdadmなので、ハードウエアのRAIDは参考にしないでください。
- ディスクをソフトウェア的にオンラインで交換するのであって、ハードウェアがホットスワップに対応していなければ、結局電源を切る必要があります。
- UEFI・BIOS両方のブートに対応した設定を行います。また、システムはUEFIで起動しているものとします。(そうでない場合、UEFIのブート登録ができません。)
- やる気が必要です。VPSとかクラウドはこんなことしなくていいです。羨ましい(でもスペックあたりの性能が・・・)
何をするか?
次のことを行います。
- 新しいディスクのパーティションを何とかする。
- mdadmのRAID1アレイの設定を変えて同期する。
- 上記の実行中に、UEFI・BIOSのブート関連を片付ける。
1.新しいディスクのパーティションを何とかする。
サーバーのシステムはsda2とsdb2のRAID1で構成されています。
sudo mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Sat May 26 19:36:23 2018 Raid Level : raid1 Array Size : 195181568 (186.14 GiB 199.87 GB) Used Dev Size : 195181568 (186.14 GiB 199.87 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Intent Bitmap : Internal Update Time : Fri Oct 19 21:49:14 2018 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Name : UUID : Events : Number Major Minor RaidDevice State 1 8 18 0 active sync /dev/sdb2 2 8 2 1 active sync /dev/sda2
sdaとsdbの構成を確認します。
sudo fdisk -l /dev/sda Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: xxxxxxxxxxxxxxxxxx Device Boot Start End Sectors Size Id Type /dev/sda1 2048 197360 195313 95.4M c W95 FAT32 (LBA) /dev/sda2 * 198656 390823935 390625280 186.3G fd Linux raid autodetect /dev/sda3 390825984 488482233 97656250 46.6G 82 Linux swap / Solaris
sudo fdisk -l /dev/sdb Disk /dev/sdb: 232.9 GiB, 250000000000 bytes, 488281250 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: xxxxxxxxxxxxxxx Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 194559 192512 94M b W95 FAT32 /dev/sdb2 * 194560 390819839 390625280 186.3G fd Linux raid autodetect /dev/sdb3 390819840 488280063 97460224 46.5G 82 Linux swap / Solaris
これをまとめると次のような構成なっています。
- sdx1はUEFIの領域 100MB
- sdx2はシステム領域 200GB
- sdx3はswap領域 自由
なのでSSDをこの3つのパーティションに分けます。今回はUEFI・BIOS互換なので、fdiskを使います。(3TBでもないし、3つしかパーティション分けないので・・・)
新しいディスクはsdeなので、fdiskを起動します。
sudo fdisk /dev/sde Welcome to fdisk (util-linux 2.29.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help):
「p」でディスクの状態を確認します。
Command (m for help): p Disk /dev/sde: 232.9 GiB, 250059350016 bytes, 488397168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: xxxxxxxxxxxxxx
gptなので、DOSにします。DOSテーブルは「o」コマンドです。
Command (m for help): o Created a new DOS disklabel with disk identifier 0xxxxxxx Command (m for help): p Disk /dev/sde: 232.9 GiB, 250059350016 bytes, 488397168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xxxxxxx
DOS形式になりました。(言い忘れましたが、MBRと呼ばれるものと同一です。)
UEFI用のパーティションを作ります。パーティションの作成は「n」です。
パーティションの大きさの指定はセクタとサイズのどちらかです。今回は100MBの領域なので、「+100M」と指定します。
Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-488397167, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-488397167, default 488397167): +100M Created a new partition 1 of type 'Linux' and of size 100 MiB. Command (m for help): p Disk /dev/sde: 232.9 GiB, 250059350016 bytes, 488397168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xxxxxxxxx Device Boot Start End Sectors Size Id Type /dev/sde1 2048 206847 204800 100M 83 Linux
次にシステム領域を作りますが、この領域はmdadmで使用するので、セクタ数を統一します。セクタ数は「390625280」です。そんな数どこから出たんだよと思う方は、「Ctrlキー + Fキー 」でページ内検索してください。統一しなくてもできますが、やっぱりきれいに揃えたいよね。
Command (m for help): n Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): p Partition number (2-4, default 2): First sector (206848-488397167, default 206848): Last sector, +sectors or +size{K,M,G,T,P} (206848-488397167, default 488397167): +390625280 Created a new partition 2 of type 'Linux' and of size 186.2 GiB. Command (m for help): p Disk /dev/sde: 232.9 GiB, 250059350016 bytes, 488397168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xxxxxxxxxxxx Device Boot Start End Sectors Size Id Type /dev/sde1 2048 206847 204800 100M 83 Linux /dev/sde2 * 206848 390832128 390625281 186.2G 83 Linux
(セクタで指定してるのに1ずれるのは妖怪の仕業?)
次にswap領域ですが、SSDなので10GBぐらいにしておきます。このSSDは250GBなので、40GBが未割り当て領域になります。SSDのファームウェアが好み割当領域を活用して、高寿命化してくれるはずです。(オーバープロビジョニングと呼びます。気休めです・・・)
Command (m for help): n Partition type p primary (2 primary, 0 extended, 2 free) e extended (container for logical partitions) Select (default p): p Partition number (3,4, default 3): First sector (390625281-488397167, default 390627328): Last sector, +sectors or +size{K,M,G,T,P} (390627328-488397167, default 488397167): +10G Created a new partition 3 of type 'Linux' and of size 10 GiB. Command (m for help): p Disk /dev/sde: 232.9 GiB, 250059350016 bytes, 488397168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xxxxxx Device Boot Start End Sectors Size Id Type /dev/sde1 2048 206847 204800 100M 83 Linux /dev/sde2 206848 390832128 390625281 186.3G 83 Linux /dev/sde3 390834176 411805695 20971520 10G 83 Linux
これで3つの領域ができました。しかしどうでしょうか?Typeが全部linux担ってるんですよねww。これを直します。typeは「l」で確認できます。
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi ea Rufus alignment
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT
10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f1 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f4 SpeedStor
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fb VMware VMFS
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fc VMware VMKCORE
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fd Linux raid auto
1c Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fe LANstep
1e Hidden W95 FAT1 80 Old Minix be Solaris boot ff BBT
IDはそれぞれ「b」「fd」「82」であることがわかります。
EFIパーティションは「ef」でも構いませんが、windowsから見るとき見えなくなります。
typeの変更は「t」です。
Command (m for help): t Partition number (1-3, default 3): 1 Partition type (type L to list all types): b Changed type of partition 'Linux' to 'W95 FAT32'. Command (m for help): t Partition number (1-3, default 3): 2 Partition type (type L to list all types): fd Changed type of partition 'Linux' to 'Linux raid autodetect'. Command (m for help): t Partition number (1-3, default 3): 3 Partition type (type L to list all types): 82 Changed type of partition 'Linux' to 'Linux swap / Solaris'. Command (m for help): p Disk /dev/sde: 232.9 GiB, 250059350016 bytes, 488397168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xxxxxxxxxx Device Boot Start End Sectors Size Id Type /dev/sde1 2048 206847 204800 100M b W95 FAT32 /dev/sde2 206848 390832128 390625281 186.3G fd Linux raid autodetect /dev/sde3 390834176 411805695 20971520 10G 82 Linux swap / Solaris
できました。しかしこれではこのSSDからはシステムは起動しません。BOOTフラグが立っていないからです。これを立てます。「a」です。
Command (m for help): p Disk /dev/sde: 232.9 GiB, 250059350016 bytes, 488397168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xxxxxxx Device Boot Start End Sectors Size Id Type /dev/sde1 2048 206847 204800 100M b W95 FAT32 /dev/sde2 * 206848 390832128 390625281 186.3G fd Linux raid autodetect /dev/sde3 390834176 411805695 20971520 10G 82 Linux swap / Solaris
Bootの欄に*が表示されました。最後にこの操作を書き込まなければなりません。変更を確認して「w」を入力します。
Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
確認無しで書き込まれます。書き込みが終わるとfdiskは終了します。ちゃんと書き込めたか確認します。
sudo fdisk -l /dev/sde Disk /dev/sde: 232.9 GiB, 250059350016 bytes, 488397168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xxxxxxx Device Boot Start End Sectors Size Id Type /dev/sde1 2048 206847 204800 100M b W95 FAT32 /dev/sde2 * 206848 390832128 390625281 186.3G fd Linux raid autodetect /dev/sde3 390834176 411805695 20971520 10G 82 Linux swap / Solaris
できてます。
2.mdadmのRAID1アレイの設定を変えて同期する。
パーティションができたので、早速RAIDに追加します。mdadmの領域はsde2なのでこれを追加します。
sudo mdadm --add /dev/md0 /dev/sde2 mdadm: added /dev/sde2
様子を見て見ます
sudo mdadm /dev/md0 /dev/md0: 186.14GiB raid1 2 devices, 1 spare. Use mdadm --detail for more detail.
スペアとして追加されました。これはRAID1が2台で動作するからです。このままだと、同期してくれないので、3台に変えます。
sudo mdadm --grow /dev/md0 --raid-devices=3 raid_disks for /dev/md0 set to 3
同期が始まりました。
sudo mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Sat May 26 19:36:23 2018 Raid Level : raid1 Array Size : 195181568 (186.14 GiB 199.87 GB) Used Dev Size : 195181568 (186.14 GiB 199.87 GB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent Intent Bitmap : Internal Update Time : Fri Oct 19 22:55:16 2018 State : active, degraded, recovering Active Devices : 2 Working Devices : 3 Failed Devices : 0 Spare Devices : 1 Rebuild Status : 0% complete Name : UUID : Events : Number Major Minor RaidDevice State 1 8 18 0 active sync /dev/sdb2 2 8 2 1 active sync /dev/sda2 3 8 66 2 spare rebuilding /dev/sde2
どれぐらいで終わるか見てみてみます。
cat /proc/mdstat Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] md0 : active raid1 sde2[3] sdb2[1] sda2[2] 195181568 blocks super 1.2 [3/2] [UU_] [>....................] recovery = 2.7% (5302400/195181568) finish=47.7min speed=66325K/sec bitmap: 2/2 pages [8KB], 65536KB chunk
30分はかかるので、次の作業をしましょう。
3.上記の実行中に、UEFI・BIOSのブート関連を片付ける。
UEFIの領域をFAT32でフォーマットします。
sudo mkfs.vfat -v -c -F 32 /dev/sde1
マウントします。/boot/efi3 とします。
sudo mkdir /boot/efi3 sudo mount /dev/sde1 /boot/efi3
GURB(EFI)をインストールします。efibootmgrはマザーボードのブートリストが表示できます。しっかりUEFIに登録されています。(なんか出てますが気にしない。)
sudo grub-install --efi-directory /boot/efi3 --bootloader-id debian-ssd Primary GPT is invalid, using alternate GPT. Primary GPT is invalid, using alternate GPT. Primary GPT is invalid, using alternate GPT. Installation finished. No error reported. server@server1:~$ efibootmgr BootCurrent: 0006 Timeout: 1 seconds BootOrder: 0007,0006,0000,0001,0002,0003,0004,0005 Boot0000* debian Boot0001* TSSTcorp DVD-ROM SH-116CB Boot0002* WDC WD10JPVX-22JC3T0 Boot0003* WDC WD2500AAJS-75M0A0 Boot0004* ST3000VN007-2E4166 Boot0005* WDC WD40EZRZ-00GXCB0 Boot0006* debian(sub) Boot0007* debian-ssd
次にGURB(BIOS)をインストールします。こればMBRにインストールします。
sudo grub-install --target=i386-pc /dev/sde 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.
次に、/etc/fstab に SSD が /boot/efi3 に自動マウントするようにします。fstabにはUUIDを使用します。sdxは変化しちゃうので。
sudo blkid /dev/sde1 /dev/sde1: UUID="xxxxxxxxx" TYPE="vfat" PARTUUID="xxxxxxxx"
blkidコマンドで、UUID=が得られます。fstabを編集すると以下のようになります。
cat /etc/fstab ~略~ #EFI #UUID=XXXX-XXXX /boot/efi2 vfat defaults 0 1 UUID=XXXX-XXXX /boot/efi vfat defaults 0 1 UUID=XXXX-XXXX /boot/efi3 vfat defaults 0 1
次に、sde3にswap領域を作成します。mkswap コマンドで作成できます。
sudo mkswap /dev/sde3 Setting up swapspace version 1, size = 10 GiB (10737414144 bytes) no label, UUID=
ちゃんとできたか確認するために、一時的にswapを有効にします。swapon コマンドを実行します。
sudo swapon /dev/sde3 sudo swapon -s Filename Type Size Used Priority /dev/sda3 partition 48828120 109176 -1 /dev/sdb3 partition 48730108 0 -2 /dev/sde3 partition 10485756 0 -3
できてます。これをfstabに追加して、自動で使えるようにします。
cat /etc/fstab #SWAP # swap was on /dev/sda3 during installation UUID= none swap sw 0 0 # swap was on /dev/sdb3 during installation #UUID= none swap sw 0 0 # swap was on /dev/sd3 during installation UUID= none swap sw 0 0
fstabの変更を適応するために次のコマンドを実行します。
sudo update-grub Generating grub configuration file ... Found background image: /usr/share/images/desktop-base/desktop-grub.png Linux イメージを見つけました: /boot/vmlinuz-4.9.0-8-amd64 Found initrd image: /boot/initrd.img-4.9.0-8-amd64 Linux イメージを見つけました: /boot/vmlinuz-4.9.0-7-amd64 Found initrd image: /boot/initrd.img-4.9.0-7-amd64 Linux イメージを見つけました: /boot/vmlinuz-4.9.0-6-amd64 Found initrd image: /boot/initrd.img-4.9.0-6-amd64 Adding boot menu entry for EFI firmware configuration 完了 sudo update-initramfs -u update-initramfs: Generating /boot/initrd.img-4.9.0-8-amd64 W: initramfs-tools configuration sets RESUME=UUID= W: but no matching swap device is available. I: The initramfs will attempt to resume from /dev/sda3 I: (UUID=) I: Set the RESUME variable to override this.
RAID1の同期ができました。
sudo mdadm /dev/md0 /dev/md0: 186.14GiB raid1 3 devices, 0 spares. Use mdadm --detail for more detail
/dev/sdbを引っこ抜く準備をします。
sudo mdadm /dev/md0 /dev/md0: 186.14GiB raid1 3 devices, 0 spares. Use mdadm --detail for more detail. sudo mdadm /dev/md0 --fail /dev/sdb2 mdadm: set /dev/sdb2 faulty in /dev/md0 sudo mdadm /dev/md0 --remove /dev/sdb2 mdadm: hot removed /dev/sdb2 from /dev/md0 sudo mdadm --grow /dev/md0 --raid-devices=2 raid_disks for /dev/md0 set to 2 sudo mdadm /dev/md0 /dev/md0: 186.14GiB raid1 2 devices, 0 spares. Use mdadm --detail for more detail.
これで引っこ抜けます。ホットスワップの方は引っこ抜いてそうでない方は、ちょっとだけ電源を切って抜きましょう。
ディスカッション
コメント一覧
まだ、コメントがありません