我正在寻找一种将我的 HDD 克隆到 SSD 的方法,而不会丢失数据或 Linux 系统本身。问题是当前 HDD 的大小为 1TB,而我们拥有的 SSD 有 480GB,因此我无法直接克隆,因为磁盘大小不同,但我知道磁盘没有完全使用,所以我猜可以使用外部工具或通过服务器上的命令行来缩小它。现在我有 2 个 HDD,每个 1 TB 连接到服务器,不知道如何用这些更小更快的 SSD 替换。任何帮助都将不胜感激。
#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 931G 0 disk
├─sda1 8:1 0 953M 0 part /boot/efi
├─sda2 8:2 0 953M 0 part /boot
└─sda3 8:3 0 929.1G 0 part
├─rl-root 253:0 0 18.6G 0 lvm /
├─rl-swap 253:1 0 29.8G 0 lvm [SWAP]
├─rl-usr 253:2 0 10G 0 lvm /usr
├─rl-var_lib_docker 253:3 0 93.1G 0 lvm /var/lib/docker
├─rl-opt 253:4 0 93.1G 0 lvm /opt
├─rl-var_log_audit 253:5 0 4.7G 0 lvm /var/log/audit
├─rl-var 253:6 0 9.3G 0 lvm /var
├─rl-home 253:7 0 1.9G 0 lvm /home
├─rl-var_log 253:8 0 4.7G 0 lvm /var/log
├─rl-tmp 253:9 0 4.7G 0 lvm /tmp
└─rl-var_tmp 253:10 0 4.7G 0 lvm /var/tmp
# fdisk -l /dev/sd?
Disk /dev/sda: 931 GiB, 999653638144 bytes, 1952448512 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 65536 bytes / 65536 bytes
Disklabel type: gpt
Disk identifier: 0219246B-336B-4D22-96A3-FD679EDA66DE
Device Start End Sectors Size Type
/dev/sda1 2048 1953791 1951744 953M EFI System
/dev/sda2 1953792 3905535 1951744 953M Linux filesystem
/dev/sda3 3905536 1952448478 1948542943 929.1G Linux LVM
# df -h | grep -v docker
Filesystem Size Used Avail Use% Mounted on
devtmpfs 7.5G 0 7.5G 0% /dev
tmpfs 7.5G 0 7.5G 0% /dev/shm
tmpfs 7.5G 95M 7.5G 2% /run
tmpfs 7.5G 0 7.5G 0% /sys/fs/cgroup
/dev/mapper/rl-root 19G 232M 19G 2% /
/dev/mapper/rl-usr 10G 4.8G 5.3G 48% /usr
/dev/mapper/rl-tmp 4.7G 99M 4.6G 3% /tmp
/dev/mapper/rl-home 1.9G 1014M 885M 54% /home
/dev/mapper/rl-var 9.4G 3.0G 6.4G 32% /var
/dev/sda2 949M 276M 674M 30% /boot
/dev/sda1 952M 5.8M 946M 1% /boot/efi
/dev/mapper/rl-var_tmp 4.7G 66M 4.6G 2% /var/tmp
/dev/mapper/rl-var_log 4.7G 1.3G 3.5G 27% /var/log
/dev/mapper/rl-opt 94G 7.6G 86G 9% /opt
/dev/mapper/rl-var_log_audit 4.7G 106M 4.6G 3% /var/log/audit
tmpfs 1.5G 0 1.5G 0% /run/user/0
# lshw
*-raid
description: RAID bus controller
product: MegaRAID SAS-3 3008 [Fury]
vendor: Broadcom / LSI
physical id: 0
bus info: pci@0000:02:00.0
logical name: scsi0
version: 02
width: 64 bits
clock: 33MHz
capabilities: raid pm pciexpress msi msix bus_master cap_list rom
configuration: driver=megaraid_sas latency=0
resources: irq:17 ioport:5000(size=256) memory:91c00000-91c0ffff memory:91b00000-91bfffff memory:91a00000-91afffff
*-disk
description: SCSI Disk
product: PRAID CP400i
vendor: FTS
physical id: 2.0.0
bus info: scsi@0:2.0.0
logical name: /dev/sda
version: 4.68
serial: 004f93e10b84d6222c40f6200004000e
size: 931GiB (999GB)
capabilities: gpt-1.00 partitioned partitioned:gpt
configuration: ansiversion=5 guid=0219246b-336b-4d22-96a3-fd679eda66de logicalsectorsize=512 sectorsize=4096
*-volume:0
description: Windows FAT volume
vendor: mkfs.fat
physical id: 1
bus info: scsi@0:2.0.0,1
logical name: /dev/sda1
logical name: /boot/efi
version: FAT32
serial: cbe6-07f6
size: 951MiB
capacity: 952MiB
capabilities: boot fat initialized
configuration: FATs=2 filesystem=fat mount.fstype=vfat mount.options=rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=winnt,errors=remount-ro name=EFI System Partition state=mounted
*-volume:1
description: EFI partition
physical id: 2
bus info: scsi@0:2.0.0,2
logical name: /dev/sda2
logical name: /boot
serial: 7ca4eedb-7995-4a39-b1c8-676c006e7c83
capacity: 952MiB
configuration: mount.fstype=xfs mount.options=rw,seclabel,relatime,attr2,inode64,logbufs=8,logbsize=32k,sunit=128,swidth=128,noquota state=mounted
*-volume:2
description: LVM Physical Volume
vendor: Linux
physical id: 3
bus info: scsi@0:2.0.0,3
logical name: /dev/sda3
serial: gE8t7L-MEtM-wxjh-VGNz-19ch-dDXX-NQKV7n
size: 269GiB
capacity: 929GiB
capabilities: multi lvm2
# lspci | grep RAID
02:00.0 RAID bus controller: Broadcom / LSI MegaRAID SAS-3 3008 [Fury] (rev 02)
@Nikita 我不仅可以物理访问,还可以通过网络访问,我认为 RAID 配置是软件。
答案1
在考虑到可能的重新安排而构建的系统上,这可能就像连接其他设备、初始化它们、迁移卷和重新安装引导加载程序一样简单,甚至可能在不关闭服务的情况下实现。
我有个好消息要告诉你:你的布局与此相符。你使用 LVM,卷组中的所有空间都未分配。所有逻辑卷加起来似乎占用的空间小于 480GB SSD 上通常可用的空间,这意味着你不需要任何文件系统大小调整。我认为即使不停止服务,一切皆有可能。
此外,虽然与此特定情况无关,但请记住,它并不总是归结为缩小文件系统然后克隆。在许多情况下,您可能只是创建新的文件系统并复制文件。
您有一个 Broadcom HW RAID,通常称为“LSI MegaRAID SAS”,这是一种现代 RAID,由以下设备管理:该storcli
程序。要从 Broadcom 网站获取它,您需要知道它的卡型号;目前,我们知道它使用的是 3008 控制器芯片,但不幸的是,这不足以将您引导到正版下载页面。
该实用程序将允许您在操作系统内部操作和监控您的 RAID;这种能力是必须的!但是,我没有足够的经验使用它;我以前用过megacli
,现在已经过时了,可能将它与较新的卡一起使用不是一个好主意。或者,您可以重新启动并使用一些按键调用启动时实用程序,然后从那里创建新的逻辑磁盘。
从新媒体组创建新的 RAID 阵列和新逻辑磁盘后,您需要像这样对其进行分区并创建类似的布局,只是最后一个分区较小。
screen
如果您使用远程连接执行迁移,我建议在或中执行所有操作tmux
,这样即使您恰好由于网络问题而丢失连接,shell 会话仍将保留,您将能够连接到它。如果您坐在终端前或使用某些 KVM 之王(iLO、iDRAC、xClarity 等),这并不重要。
假设/dev/sdb
在操作系统中恰好调用了新的 RAID 虚拟磁盘。确保使用正确的设备,否则将很难恢复数据。:
- 跑步
fdisk /dev/sdb
- 按下
g
创建GPT分区表(并同意擦除)。 - 通过创建相同大小的新分区来创建 EFI 系统分区 (ESP):,
n
选择类型 1“ESP”并使用大小953M
(M 表示 MiB,即现有 ESP 的精确大小) - 创建启动分区:
n
,选择“Linux 文件系统”(我不记得它对应的是哪个数字)并953M
再次使用大小。 - 创建 LVM 分区:
n
,选择“Linux LVM”(如果我没记错的话是 31)并接受它所建议的任何内容以填充所有剩余空间。 - 接受改变并退出:
w
。
然后,克隆非 LVM 的文件系统。为此:
- 卸载 ESP 和 /boot 分区:
umount /boot/efi /boot
- 克隆其内容:
dd if=/dev/sda1 of=/dev/sdb1
和dd if=/dev/sda2 of=/dev/sdb2
。如果此阶段出现错误,请不要继续,直到您解决它们!一个原因可能是尺寸不正确。 - 由于您正在使用 XFS 作为 /boot,因此您现在必须更改克隆的 UUID,否则您将无法挂载:
xfs_admin -U generate /dev/sdb2
。不要忘记/etc/fstab
使用新的 UUID 进行更新(如果它使用 UUID 进行挂载,它应该这样做)。 - 挂载新的 /boot 和 ESP 分区:
mount /dev/sdb2 /boot
和mount /dev/sdb1 /boot/efi
。
现在,从剩余的大分区中创建 PV 并将其添加到现有卷组中:
pvcreate /dev/sdb3
vgextend r1 /dev/sdb3
现在准备进行最长的操作:将数据从 HDD 物理卷中移出:
pvmove -vi 5 /dev/sda3
最后,从卷组中删除 HDD 逻辑驱动器并删除 LVM 标签:
vgreduce r1 /dev/sda3
pvremove /dev/sda3
完成后,就该重新配置从新 RAID 启动了。您可能需要设置 RAID 卡以使此新卷成为主启动;这通常不需要 EFI 启动,但这样做也无妨。
设置固件启动项以从新 RAID 启动。使用操作系统版本提供的工具,或手动执行efibootmgr
;无论如何,具体命令取决于您使用的发行版。