我一直在尝试让 CUDA 在我的系统上运行,但在处理 nvidia 驱动程序的过程中,我已经严重损坏了 ubuntu,以至于我不得不多次重新格式化我的驱动器分区。现在我已经被那根棒击中了足够多的次数,所以我在安装完所有工具、程序和东西后,尝试使用 dd(朋友推荐的)备份我的分区。
然而,当我跑的时候
sudo dd if=/dev/sda4 of=~/backup.img
我最终收到一条错误消息,提示我的驱动器空间不足。这对我来说很奇怪,因为分区很大,而且我刚刚安装了 ubuntu,上面有几个(小)程序。
我认为可能发生的情况是,它正在递归地尝试写入已写入内容的副本,因此我尝试将文件直接写入另一个分区:
sudo dd if=/dev/sda4 of=/media/Ye\ Olde\ Data/ubuntu\ reinstall\ backup/backup.img
但这花了很长时间,而且一旦文件大小达到我确信太大而无法包含我想要的数据时,我就中止了该过程。
发生了什么?是不是因为 /media 挂载了其他分区,因此它将其他分区视为 /dev/sda4 的一部分?是不是因为 dd 逐字节复制整个分区,而忽略了哪些字节上实际上有文件?
无论如何,我怎样才能正确地完成我想做的事情?
哦,这是我的磁盘信息,以防万一:
sudo sfdisk -l /dev/sda
Disk /dev/sda: 62260 cylinders, 255 heads, 63 sectors/track
Warning: extended partition does not start at a cylinder boundary.
DOS and Linux will interpret the contents differently.
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/sda1 * 0+ 12- 13- 102400 7 HPFS/NTFS/exFAT
/dev/sda2 12+ 14602- 14590- 117187500 7 HPFS/NTFS/exFAT
/dev/sda3 29192+ 62260- 33069- 265622493+ 5 Extended
/dev/sda4 14602+ 29191- 14590- 117193728 83 Linux
/dev/sda5 61228+ 62260- 1032- 8287232 82 Linux swap / Solaris
/dev/sda6 29192+ 61227 32036- 257329138+ 7 HPFS/NTFS/exFAT
答案1
如果使用 复制分区 dd
,则输出文件将与分区一样大。 复制dd
磁盘的物理副本时,它不知道空白空间或已用空间。
如果你压缩结果文件,你将节省大量空间,因为空白空间会很好地压缩(注意,这将是计算上的非常重)。您甚至可以动态压缩的输出dd
,使用类似于 的行dd if=/dev/sdaX | gzip -c > compressed_file.gz
。
非常重要:
此外,你不能(永远不要)
dd
在活动(已安装)分区上执行此操作,记录的数据将完全不一致,并且绝对无法用于备份。想想看:数据块不断被分配、移动和删除;就像对移动目标进行长时间曝光拍摄照片一样。要复制分区,
dd
您必须从不同的设备启动 - 实时 USB 或其他设备。
我会怎么做来解决手头的问题(请注意,只有通用指令,因为你需要知道自己在做什么)
第一个选项购买 Norton Ghost,或探索开源选项:部分图像和克隆(从未亲自测试过)。
第二种选择手动操作:
为备份创建一个额外的分区,将其命名为 /dev/sdX(或者使用公共数据分区,随便什么都可以)。
备份:
- 使用 live usb 启动
- 在 /real 中挂载真实根分区
- 将额外分区挂载到 /extra
- 做一个大的 tar,在
(cd /real && tar cvf /extra/mybck.tar.gz)
恢复
- 使用 live usb 启动
- 在 /real 中挂载真实根分区
- 将额外分区挂载到 /extra
- 恢复时,
(cd /real && tar xvpf /extra/mybck.tar.gz)
请注意p
保留元数据的选项 - chroot 到 /real
- 更新 grub 或你正在使用的引导加载程序
您可以tar
用您喜欢的归档器替换,只要确保它尊重文件的所有权/模式即可。rsync
值得探索。
答案2
DD 可能不是进行备份的合适工具。正如 Rmano 所说,它直接复制 /dev/sda4(可能复制到 /dev/sda4)。
他的回答非常正确。
检查 rsync 以进行备份。