はじめに
自宅のLinuxサーバーでSambaを使用して共有フォルダを使っています。
この共有フォルダの物理層は、Raid1のHDD×2で構成されています。
今回、この2つのHDDのうち1つを除くことにしました。
そして最終的には、Raidもやめることにしました。(大したデータが入っていなく、他で使いたくなったため)
ここにその時の手順を、備忘録として残そうと思います。
サーバーの再起動を除いて、ダウンタイムはほぼゼロで完了できました。
構成
現在の構成を表にすると概ね以下のようになります。
項目 | バージョン等 |
---|---|
ハードウェア基盤 | VMware ESXi 7.0.0 (Build 16324942) |
OS | CentOS Linux 7 (仮想サーバー) |
ソフトウェアRaid | mdadm - v4.1 - 2018-10-01 |
作業前と作業後
やること
やることは概ね以下のようになります。
- Raidを構成しているHDDのひとつをRaidから除外。
- Raidから除外したHDDからパーティションを削除。
- Raidから除外したHDDをにパーティションを作成。
- Raidから除外したHDDのパーティションタイプを指定。
- Linuxを再起動。
- Raidから除外したHDDの情報を削除。
- 物理ボリュームを作成。
- 新規のボリュームグループを作成。
- 新規の論理ボリュームを作成。
- 作成した論理ボリュームをフォーマット。
- Raidを構成している残り1台のHDDから、新規作成した論理ボリュームのHDDへデータをコピー。
- Raidを削除。
- コピー元のHDDの初期化。
手順
手順をコマンドベースで残します。すべてrootユーザーで行っています。
現状確認
Raidの状態確認
# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc[1] sdb[0]
5851760832 blocks super 1.2 [2/2] [UU]
bitmap: 0/44 pages [0KB], 65536KB chunk
unused devices: <none>
# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Jan 13 07:48:12 2021
Raid Level : raid1
Array Size : 5851760832 (5.45 TiB 5.99 TB)
Used Dev Size : 5851760832 (5.45 TiB 5.99 TB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Tue Jan 24 13:54:28 2023
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : bitmap
Name : FILEVM01:0 (local to host FILEVM01)
UUID : 3954bb00:4a32a654:69751b93:d4e5a938
Events : 36380
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
RaidはRaid1であり、/dev/sdb
と/dev/sdc
で構成されていることがわかりました。
LVMの現状確認
# pvs
PV VG Fmt Attr PSize PFree
/dev/md0 VGroup1 lvm2 a-- <5.45t 0
/dev/sda3 VGroup0 lvm2 a-- 48.75g 0
# vgs
VG #PV #LV #SN Attr VSize VFree
VGroup0 1 6 0 wz--n- 48.75g 0
VGroup1 1 1 0 wz--n- <5.45t 0
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
LVolume01 VGroup0 -wi-ao---- 30.00g
LVolume02 VGroup0 -wi-ao---- 4.00g
LVolume03 VGroup0 -wi-ao---- 2.00g
LVolume04 VGroup0 -wi-ao---- 1.00g
LVolume05 VGroup0 -wi-ao---- 8.00g
LVolume06 VGroup0 -wi-ao---- 3.75g
LVolume11 VGroup1 -wi-ao---- <5.45t
Raidのmd0
が物理ボリュームとして指定されています。
共有フォルダのボリュームグループはVGroup1
になります。
共有フォルダの論理ボリュームはLVolume11
になります。
ファイルシステム確認
# df -mT
ファイルシス タイプ 1M-ブロック 使用 使用可 使用% マウント位置
devtmpfs devtmpfs 860 0 860 0% /dev
tmpfs tmpfs 872 0 872 0% /dev/shm
tmpfs tmpfs 872 1 871 1% /run
tmpfs tmpfs 872 0 872 0% /sys/fs/cgroup
/dev/mapper/VGroup0-LVolume01 ext4 30110 3750 24809 14% /
/dev/sda2 ext4 976 195 715 22% /boot
/dev/sda1 vfat 250 12 239 5% /boot/efi
/dev/mapper/VGroup0-LVolume05 ext4 7936 1319 6192 18% /var
/dev/mapper/VGroup0-LVolume04 ext4 976 3 907 1% /home
/dev/mapper/VGroup0-LVolume03 ext4 1952 7 1828 1% /tmp
/dev/mapper/VGroup0-LVolume06 ext4 3716 15 3493 1% /var/crash
/dev/mapper/VGroup1-LVolume11 ext4 5669426 2984245 2399435 56% /var/shared
tmpfs tmpfs 175 0 175 0% /run/user/1001
ファイルシステムはext4
であることがわかりました。
変更作業
Raid1から片系のHDDを1台除外
# mdadm --manage /dev/md0 --fail /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md0
# mdadm --manage /dev/md0 --remove /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md0
faulty
状態にしてからremove
しないとmdadm: hot remove failed for /dev/sdc: Device or resource busy
が発生したためこの手順になっています。
Raidの状態確認
# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc[1](F) sdb[0]
5851760832 blocks super 1.2 [2/1] [U_]
bitmap: 0/44 pages [0KB], 65536KB chunk
unused devices: <none>
# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Jan 13 07:48:12 2021
Raid Level : raid1
Array Size : 5851760832 (5.45 TiB 5.99 TB)
Used Dev Size : 5851760832 (5.45 TiB 5.99 TB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Tue Jan 24 14:11:51 2023
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 1
Spare Devices : 0
Consistency Policy : bitmap
Name : FILEVM01:0 (local to host FILEVM01)
UUID : 3954bb00:4a32a654:69751b93:d4e5a938
Events : 36382
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
- 0 0 1 removed
1 8 32 - faulty /dev/sdc
/dev/sdc
が除外され、/dev/sdb
だけになりました。
パーティションの削除
# fdisk /dev/sdc
WARNING: The size of this disk is 6.0 TB (5992338370560 bytes).
DOS partition table format can not be used on drives for volumes
larger than (2199023255040 bytes) for 512-byte sectors. Use parted(1) and GUID
partition table format (GPT).
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
コマンド (m でヘルプ): d
Selected partition 1
Partition 1 is deleted
コマンド (m でヘルプ): w
パーティションテーブルは変更されました!
ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。
fdisk
コマンドを使います。d
がパーティション削除で、w
が上書き保存です。
パーティション再作成
# fdisk /dev/sdc
WARNING: The size of this disk is 6.0 TB (5992338370560 bytes).
DOS partition table format can not be used on drives for volumes
larger than (2199023255040 bytes) for 512-byte sectors. Use parted(1) and GUID
partition table format (GPT).
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
コマンド (m でヘルプ): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
パーティション番号 (1-4, default 1):
最初 sector (2048-4294967295, 初期値 2048):
初期値 2048 を使います
Last sector, +sectors or +size{K,M,G} (2048-4294967294, 初期値 4294967294):
初期値 4294967294 を使います
Partition 1 of type Linux and of size 2 TiB is set
コマンド (m でヘルプ): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
コマンド (m でヘルプ): w
パーティションテーブルは変更されました!
ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。
パーティション削除と同時にできると思いますが、ここでは別で実行しました。
fdisk
コマンドを使い、n
で新規パーティション作成、t
でパーティションタイプ指定になります。
パーティションタイプは8e
がLinux LVM
です。
w
で上書き保存します。
デバイス状態の確認
# fdisk -l /dev/sdc
Disk /dev/sdc: 5992.3 GB, 5992338370560 bytes, 11703785880 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x9cbb1901
デバイス ブート 始点 終点 ブロック Id システム
/dev/sdc1 2048 4294967294 2147482623+ 8e Linux LVM
Raidから切り離した/dev/sdc
にパーティションができあがり、パーティションタイプはLinux LVM
になっています。
サーバー再起動
# shutdown -r now
ここでサーバーを再起動しました。
Raid情報の削除
# wipefs -a /dev/sdc
/dev/sdc: 4 bytes were erased at offset 0x00001000 (linux_raid_member): fc 4e 2b a9
/dev/sdc: 2 bytes were erased at offset 0x000001fe (dos): 55 aa
/dev/sdc: calling ioclt to re-read partition table: 成功です
/dev/sdc
をRaid情報から削除します。これをやっていないと、pvcreate
が失敗しました。
LVMの作成
物理ボリュームの作成
# pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created.
# pvs
PV VG Fmt Attr PSize PFree
/dev/md0 VGroup1 lvm2 a-- <5.45t 0
/dev/sda3 VGroup0 lvm2 a-- 48.75g 0
/dev/sdc lvm2 --- <5.45t <5.45t
物理ボリュームを作成しました。
ボリュームグループの作成
# vgcreate VGroup2 /dev/sdc
Volume group "VGroup2" successfully created
# vgs
VG #PV #LV #SN Attr VSize VFree
VGroup0 1 6 0 wz--n- 48.75g 0
VGroup1 1 1 0 wz--n- <5.45t 0
VGroup2 1 0 0 wz--n- <5.45t <5.45t
ボリュームグループをVgroup2
という名前で作成しました。
論理ボリュームの作成
# lvcreate -l 100%VG -n LVolume12 VGroup2
WARNING: LVM2_member signature detected on /dev/VGroup2/LVolume12 at offset 536. Wipe it? [y/n]: y
Wiping LVM2_member signature on /dev/VGroup2/LVolume12.
Logical volume "LVolume12" created.
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
LVolume01 VGroup0 -wi-ao---- 30.00g
LVolume02 VGroup0 -wi-ao---- 4.00g
LVolume03 VGroup0 -wi-ao---- 2.00g
LVolume04 VGroup0 -wi-ao---- 1.00g
LVolume05 VGroup0 -wi-ao---- 8.00g
LVolume06 VGroup0 -wi-ao---- 3.75g
LVolume11 VGroup1 -wi-ao---- <5.45t
LVolume12 VGroup2 -wi-a----- <5.45t
LVolume12
という名前で論理ボリュームを作成しました。
フォーマット
# mkfs.ext4 /dev/mapper/VGroup2-LVolume12
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
182874112 inodes, 1462972416 blocks
73148620 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=3611295744
44647 block groups
32768 blocks per group, 32768 fragments per group
4096 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848, 512000000, 550731776, 644972544
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
新しく作ったLVolume12
という論理ボリュームをext4
でフォーマットしました。
マウント
# mkdir /var/shared2
# mount /dev/mapper/VGroup2-LVolume12 /var/shared2
/var/shared2
というディレクトリを新しく作成してマウントしました。
ファイルのコピー
# \cp -frp /var/shared/* /var/shared2/
Raidを構成しているHDDから、新しく論理ボリュームを作ったHDDへ、全ファイルをコピーしました。
fstab編集
# cat fstab
#
# /etc/fstab
# Created by anaconda on Sat May 1 00:52:40 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/VGroup0-LVolume01 / ext4 defaults 1 1
UUID=4199baa8-8df4-431a-841d-27be41a9832c /boot ext4 defaults 1 2
UUID=7C33-B4A2 /boot/efi vfat umask=0077,shortname=winnt 0 0
/dev/mapper/VGroup0-LVolume04 /home ext4 defaults 1 2
/dev/mapper/VGroup0-LVolume03 /tmp ext4 defaults 1 2
/dev/mapper/VGroup0-LVolume05 /var ext4 defaults 1 2
/dev/mapper/VGroup0-LVolume06 /var/crash ext4 defaults 1 2
/dev/mapper/VGroup0-LVolume02 swap swap defaults 0 0
# /dev/VGroup1/LVolume11 /var/shared/ ext4 defaults 0 0
/dev/VGroup2/LVolume12 /var/shared2/ ext4 defaults 0 0
/etc/fstab
を編集して、サーバー起動時にLVolume12
が/var/shared2
にマウントされるようにします。
サーバー再起動
# shutdown -r now
削除作業
LVMを使用していたので、LVMから削除していきます。
論理ボリュームの削除
# lvremove /dev/VGroup1/LVolume11
Do you really want to remove active logical volume VGroup1/LVolume11? [y/n]: y
Logical volume "LVolume11" successfully removed
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
LVolume01 VGroup0 -wi-ao---- 30.00g
LVolume02 VGroup0 -wi-ao---- 4.00g
LVolume03 VGroup0 -wi-ao---- 2.00g
LVolume04 VGroup0 -wi-ao---- 1.00g
LVolume05 VGroup0 -wi-ao---- 8.00g
LVolume06 VGroup0 -wi-ao---- 3.75g
LVolume12 VGroup2 -wi-ao---- <5.45t
LVolume11
が無くなってLVolume12
が残っている状態です。
ボリュームグループの削除
# vgremove VGroup1
Volume group "VGroup1" successfully removed
# vgs
VG #PV #LV #SN Attr VSize VFree
VGroup0 1 6 0 wz--n- 48.75g 0
VGroup2 1 1 0 wz--n- <5.45t 0
VGroup1
が削除されました。
物理ボリュームの削除
# pvremove /dev/md0
Labels on physical volume "/dev/md0" successfully wiped.
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 VGroup0 lvm2 a-- 48.75g 0
/dev/sdc VGroup2 lvm2 a-- <5.45t 0
/dev/md0
の物理ボリュームを削除しました。
Raidの削除
# mdadm --misc --stop /dev/md0
mdadm: stopped /dev/md0
# cat /proc/mdstat
Personalities : [raid1]
unused devices: <none>
# mdadm --misc --zero-superblock /dev/sdb
mdadm --misc --stop
コマンドでRaidを削除しました。
mdadm --misc --zero-superblock
コマンドでスーパーブロックを削除しました。
サーバーシャットダウン
あとは後片付けです。
# shutdown -h now
仮想サーバーをシャットダウンしました。
ESXiシャットダウン
ホストであるESXiをシャットダウンします。このときESXiはメンテナンスモードにします。
HDD取り外し
物理的にHDDを取り外しました。
ESXi起動
これだけでは仮想サーバーは起動しません。
取り外したHDDに対応するデータストアを削除します。
取り外したHDDのデータストアを削除
ESXiコンソールにログインして、対象の仮想サーバーの設定画面を開きます。
対応するデータストアを削除します。
メンテナンスモード解除と仮想サーバー起動
ESXiのメンテナンスモードを解除して、仮想サーバーを起動しました。
これで作業は完了です。
補足(個人的なもの)
参考サイト
https://futuremix.org/2009/05/linux-raid-mdadm-manage-remove-disk-partition
https://progzakki.sanachan.com/os/how-to-extend-logical-volume/
https://abelog.tech/archives/187
https://atmarkit.itmedia.co.jp/ait/articles/1909/12/news018.html
https://atmarkit.itmedia.co.jp/ait/articles/1909/13/news019.html
https://ex1.m-yabe.com/archives/3125