Linux

縮小一個 RAID-1 分區並擴大另一個

  • January 2, 2019

我有一個專用伺服器,/dev/md2安裝/了 2 TB 並/dev/md3安裝/home了 3.5 TB。

現在我想縮小/dev/md2到 500 GB 並增長/dev/md3到大約 5 TB。我怎麼做?我已經能夠將大小調整/dev/md2到 500 GB,但沒有將底層更改/dev/sd[a,b]3為 500 GB 並將/dev/md3(和/dev/sd[a,b]4)增加到 5 TB。

的輸出cat /proc/mdstat

Personalities : [raid1]
md3 : active raid1 sda4[0] sdb4[1]
     3714478663 blocks super 1.2 [2/2] [UU]
       resync=PENDING
     bitmap: 28/28 pages [112KB], 65536KB chunk

md2 : active raid1 sda3[0] sdb3[1]
     2111700992 blocks super 1.2 [2/2] [UU]
     [====>................]  resync = 22.1% (467664704/2111700992) finish=144.6min speed=189433K/sec
     bitmap: 13/16 pages [52KB], 65536KB chunk

md1 : active raid1 sda2[0] sdb2[1]
     523712 blocks super 1.2 [2/2] [UU]

md0 : active raid1 sda1[0] sdb1[1]
     33521664 blocks super 1.2 [2/2] [UU]

fdisk -l(無 ramdisk 條目)的相關輸出:

Disk /dev/sdb: 5.5 TiB, 6001175126016 bytes, 11721045168 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: gpt
Disk identifier: 26A1CC9A-D448-41DA-AB97-926922E45FAD

Device          Start         End    Sectors  Size Type
/dev/sdb1        4096    67112959   67108864   32G Linux RAID
/dev/sdb2    67112960    68161535    1048576  512M Linux RAID
/dev/sdb3    68161536  4291825663 4223664128    2T Linux RAID
/dev/sdb4  4291825664 11721045134 7429219471  3.5T Linux RAID
/dev/sdb5        2048        4095       2048    1M BIOS boot

Partition table entries are not in disk order.


Disk /dev/sda: 5.5 TiB, 6001175126016 bytes, 11721045168 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: gpt
Disk identifier: CF6FA031-2CD0-4CD6-939B-E761A2871AB2

Device          Start         End    Sectors  Size Type
/dev/sda1        4096    67112959   67108864   32G Linux RAID
/dev/sda2    67112960    68161535    1048576  512M Linux RAID
/dev/sda3    68161536  4291825663 4223664128    2T Linux RAID
/dev/sda4  4291825664 11721045134 7429219471  3.5T Linux RAID
/dev/sda5        2048        4095       2048    1M BIOS boot

Partition table entries are not in disk order.


Disk /dev/md0: 32 GiB, 34326183936 bytes, 67043328 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


Disk /dev/md1: 511.4 MiB, 536281088 bytes, 1047424 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


Disk /dev/md2: 2 TiB, 2162381815808 bytes, 4223401984 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


Disk /dev/md3: 3.5 TiB, 3803626151424 bytes, 7428957327 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

您擁有 RAID1,因此如果您準備在重塑期間承擔磁碟故障的風險,則可以這樣做。這不是一個完整的食譜,你必須了解你在做什麼。即使這樣,您也很有可能會失去數據,我強烈建議您在開始之前進行備份。真的。是的,我是認真的。

總體規劃是

  1. 打破 RAID 鏡像
  2. 調整現在未使用的一半以適應新要求
  3. 使用新大小的分區創建新的 RAID 半鏡像
  4. 將所有文件系統從活動的一半複製到新調整大小的一半(在此之前停止盡可能多的服務)
  5. 使用新的半 RAID 重新啟動(棘手)
  6. 將鏡像的剩餘一半添加回 RAID
  7. 整理

現在,在您考慮將其應用到您的實時系統之前,請先進行備份。

在執行時,在幾個一次性環回磁碟映像上嘗試該過程。以下是創建這些的方法:

dd if=/dev/zero bs=1M count=200 > disk1.dat                          # Create a 200MB "disk"
cp -p disk1.dat disk2.dat                                            # And another

parted disk1.dat --align optimal unit MiB --script mklabel gpt       # First disk label
parted disk1.dat --align optimal unit MiB mkpart primary 1 2         # Dummy partition
parted disk1.dat --align optimal unit MiB mkpart primary 2 3
parted disk1.dat --align optimal unit MiB mkpart primary 3 150       # First useful partition
parted disk1.dat --align optimal unit MiB mkpart primary 150 100%    # Second

parted disk2.dat --align optimal unit MiB --script mklabel gpt       # Second disk
parted disk2.dat --align optimal unit MiB mkpart primary 1 2
parted disk2.dat --align optimal unit MiB mkpart primary 2 3
parted disk2.dat --align optimal unit MiB mkpart primary 3 150
parted disk2.dat --align optimal unit MiB mkpart primary 150 100%

d1=$(losetup --show --find --partscan disk1.dat); echo $d1           # Loop device
d2=$(losetup --show --find --partscan disk2.dat); echo $d2

mdadm --create /dev/md103 --metadata default --level=1 --raid-devices=2 ${d1}p3 ${d2}p3
mdadm --create /dev/md104 --metadata default --level=1 --raid-devices=2 ${d1}p4 ${d2}p4

mkfs -t ext4 -L 103 /dev/md103
mkfs -t ext4 -L 104 /dev/md104

mkdir /mnt/103 /mnt/104                                              # Mountpoints for our test filesystems
mount /dev/md103 /mnt/103
mount /dev/md104 /mnt/104

您現在將擁有兩個 RAID1 文件系統/dev/md103/dev/md104您可以在其上複製一些數據並嘗試該過程。您已經擁有$d1$d2作為環回磁碟映像設備的基本名稱。

這是一些細節。您的備份完成了嗎?

  1. 打破 RAID 鏡像

您可以使用以下命令將兩個 RAID 分區中的一半設置為故障

mdadm /dev/md103 --set-faulty ${d2}p3 --remove ${d2}p3    # sdb3
mdadm --zero-superblock ${d2}p3

mdadm /dev/md104 --set-faulty ${d2}p4 --remove ${d2}p4    # sdb4
mdadm --zero-superblock ${d2}p4
  1. 調整第二個磁碟分區的大小

使用您喜歡的工具刪除並重新創建第二個磁碟上的分區。例如,

parted $d2 --align optimal unit MiB rm 3
parted $d2 --align optimal unit MiB rm 4

此時您可能需要重新啟動系統。(或者,它partprobe可能滿足要求。)不要忘記重新創建循環設備並分配$d1$d2當你這樣做時。

parted $d2 --align optimal unit MiB mkpart primary 3 50
parted $d2 --align optimal unit MiB mkpart primary 50 100%
  1. 使用新大小的分區創建新的 RAID 半鏡像

創建 RAID 設備和文件系統。不要擔心第一個會警告你它似乎已經是數組的一部分——它是,但現在不是。

mdadm --create /dev/md203 --metadata default --level=1 --raid-devices=2 missing ${d2}p3
mdadm --create /dev/md204 --metadata default --level=1 --raid-devices=2 missing ${d2}p4

mkfs -t ext4 -L 203 /dev/md203
mkfs -t ext4 -L 204 /dev/md204

mkdir /mnt/203 /mnt/204
mount /dev/md203 /mnt/203
mount /dev/md204 /mnt/204
  1. 將所有文件系統從活動的一半複製到新調整大小的一半

在執行之前停止盡可能多的服務很重要,這樣文件系統就盡可能穩定。

cp -ax /mnt/103 /mnt/203    # cp -ax / /mnt/203
cp -ax /mnt/104 /mnt/204    # cp -ax /home /mnt/204
  1. 使用新的半 RAID 重新啟動

您必須/etc/mdadm/mdadm.conf使用新數組進行更新。使用此命令並添加任何尚未列出的內容

mdadm --examine --scan

您還需要更新grub,也許您的initramfs,以便它可以找到新的根文件系統。你沒有在你的設置中給出這些細節,所以我不能給你指示。 6. 將鏡像的剩餘一半添加回 RAID

當您完全確定您在新的半鏡像 RAID 上成功執行時,您可以銷毀原來的一半並將其添加回新的半鏡像。如果您仍然掛載文件系統,這些命令將失敗。(在這個階段他們不應該。)

mdadm --stop /dev/md103
mdadm --zero-superblock ${d1}p3

mdadm --stop /dev/md104
mdadm --zero-superblock ${d1}p4

現在使用上述命令調整剩餘磁碟分區的大小parted

將新調整大小的分區添加到新的半鏡像 RAID1

mdadm /dev/md203 --add ${d1}p3
mdadm /dev/md204 --add ${d1}p4
  1. 整理

/etc/mdadm/mdadm.conf從、grubinitramfs、 和中刪除舊設備/etc/fstab。重啟。

引用自:https://unix.stackexchange.com/questions/492019