我需要将整个笔记本硬盘连续镜像到外部 USB 硬盘上的文件中。有时外部驱动器可能会被拔掉。
我正在运行 Ubuntu Linux。
答案1
您可以设置一个镜像,它将保留第二个磁盘上所有数据的副本。
如果您的磁盘大小相同,请使用:(
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda /dev/sdb
假设 sda 是您的第一个磁盘,sdb 是您的第二个(USB)磁盘)
如果它们的大小不相等,您可以对分区执行相同的操作:(
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
注意多余的字母)。
如果你在启动时没有 USB 驱动器,那么管理会抱怨镜像处于降级状态,但您仍然可以使用它。插入驱动器后,它可以重新同步。
[编辑] 正如评论中指出的那样,我确实错过了“备份到文件在外部驱动器上”
您可以使用 dd 在外部驱动器上创建文件。例如,对于 30GB 的文件,请使用dd if=/dev/zero of=/mnt/my_usb_drive/my_backupfile bs=1M count=30*1024
。然后使用 loopback 将该文件挂载为块设备,并在新创建的块设备上运行 mdadm。
这样做的缺点是您必须添加一些热插拔规则来检测何时安装了 USB 驱动器,检查它是否是正确的磁盘,如果它是正确的磁盘而不是另一个 USB 驱动器,则运行脚本来启动环回安装并重新同步。
从技术上来说,所有这些都是可行的,但简单的文件系统转储或 rsync 到 USB 磁盘上的目录可能是更好的解决方案。
答案2
我实际上用完全不同的方法做到了这一点,使用 DRBD(协议 A)。这使我能够插入和拔出 USB 驱动器,而无需重新同步整个驱动器,并提高了写入内部 SSD 的速度。我的解决方案是http://www.my.host.net.nz/blog/2012/09/on-demand-raid-for-laptop-with-ssd-and-usb-disk/
答案3
与该问题相关的一些提示:
- 要获取设备大小(以字节为单位),请运行
blockdev --getsize64 /dev/sda
- 要快速创建大文件,请运行
dd if=/dev/zero of=/mnt/external_usb_drive/sda.mirror bs=1 count=0 seek=500107862016
- 要创建额外的环回设备运行
mknod -m640 /dev/loop_sda_mirror b 7 8
(MAJOR
和MINOR
数字,在示例中为 7 和 8,您应该相应地获取其他环回设备(运行ls -al /dev/loop*
以查看默认值)) - 要将文件附加到环回设备,请运行
losetup /dev/loop_sda_mirror /mnt/external_usb_drive/sda.mirror
然后看看另一个答案。