我的 Ubuntu 媒体服务器上的驱动器几乎已满。我希望为机器再增加 2TB 的容量,并希望所有 3.5 TB 都被识别为单个驱动器。更复杂的是,我不想丢失驱动器上的任何数据,也不想重新配置任何程序。
我的计划是使用 LVM 在新驱动器上创建卷组,并使用 dd 复制旧驱动器的内容。然后我计划擦除旧驱动器并将其添加到卷组。
这个计划能成功吗?
我最大的疑问是:-dd 能否毫无问题地将我的安装复制到另一个驱动器?即使它是一个卷组?-dd 能否将 1.5TB 驱动器复制到 2TB 驱动器并保持剩余空间可用。
答案1
如果您已经在使用 LVM:
- 确保新磁盘已安装并为 LVM 分区(切换 LVM 位)
- 在新磁盘上创建 PV(
pvcreate /dev/your-new-disk
) - 扩展您的 VG 以包含新的 PV(
vgextend your-volume-group /dev/your-new-disk
) pvmove
将数据从旧磁盘移至新磁盘。无需dd
。(pvmove /dev/your-old-disk
将强制 LVM 将数据从旧磁盘移至任何其他可用磁盘。)
如果您尚未使用 LVM:
- 在新磁盘上创建 PV 和 VG。
- 将数据复制到新 VG 中的新 LV 中。如果文件系统可用,
我会使用dump
+ ,但如果您愿意,也可以使用或或 even 。restore
cpio
tar
dd
- 格式化旧磁盘,将其变成 PV,然后将其添加到 VG。
以下内容有些主观,与 LVM 无关。
dump
+restore
:- 在原始块设备上运行,因此源
atime
等不受影响,并且ctime
可以正确设置目标等。 - 保留所有硬链接,并且应该足够了解文件系统内部,以保留所有扩展属性、安全策略和其他文件系统特定的元数据。
- 源和目标的大小可以不同;仅复制正在使用的数据。
- 应该是最快的方法。
- 在原始块设备上运行,因此源
cpio
/tar
/rsync
/cp
:- 在已挂载的文件系统上进行操作,因此源
atime
会发生变化、目标ctime
无法保留、inode 编号会发生变化等。 - 保留硬链接需要将所有已知的 inode 保留在内存中,并且可能正确完成,也可能不正确。工具可能对文件系统了解得不够好,或者没有权限保留扩展属性、安全策略和其他文件系统特定的元数据。
(例如,ext4 支持亚毫秒时间戳,但据我所知,这些工具都无法保留它们。) - 源和目标的大小可以不同;仅复制指定的数据。
- 在系统调用上花费大量时间(,,,,,,,,,,
stat
... )。opendir
readdir
closedir
mkdir
open
read
write
close
- 在已挂载的文件系统上进行操作,因此源
dd
:- 是原始块设备的精确副本。
- 复制所有块,无论是否正在使用。
- 复制所有文件系统结构,包括应为唯一的内容(例如 UUID)。
如果它们是 XFS,则无法在同一系统上同时挂载两者(默认情况下)。 - 复制期间无法调整大小。
- 如果文件系统不是很满的话,速度就会相对较慢。