我正在尝试将基本操作系统从主硬盘移动到外部硬盘。因此,我可以从外部硬盘启动基本操作系统并在主硬盘上安装 Windows 10。
休博特开启超级用户堆栈交换建议我使用这个命令:
$ dd if=/dev/sdX of=/dev/sdY bs=64K conv=noerror,sync
然而,在复制了相当长的时间后,该命令失败了。说没有空间了。我想这就像将磁盘克隆到另一个磁盘,甚至是可用空间。
我的主硬盘较大,外部硬盘较小,但主硬盘上的数据很少。
答案1
dd
只是将其输入复制到输出。如果输入是磁盘映像,则输出是相同大小的磁盘映像。您无法将磁盘复制到较小的磁盘。相反,您需要在目标磁盘上创建较小的分区,在这些分区上创建较小的文件系统,然后复制文件。
这里最简单的方法是收缩/home
文件系统,然后收缩包含它的分区,以便您想要复制的所有内容都适合目标磁盘。我认为 GParted 可以做到这一点。如果不能,或者如果您更喜欢命令行解决方案,请首先运行resize2fs
以收缩文件系统/dev/sda3
(必须卸载),然后/dev/sda3
使用parted
或收缩分区fdisk
。调整分区大小时要非常小心:如果您不小心使其小于文件系统,文件系统可能会变得不可用。
一旦所有分区都适合目标磁盘的大小,您就可以进行直接复制(cat /dev/sda >/dev/sdb
-不要使用dd
,它是慢点和容易出错)。
答案2
您的命令正在尝试将整个磁盘 (if=/dev/sdX) 复制到外部驱动器。我猜测您的 Linux 安装与 Windows 安装位于不同的分区上。因此您需要指定该分区。例如if=/dev/sda1
。您可能不需要为外部磁盘指定分区,所以of=/dev/sdY
应该没问题。
要找出分区,您可以启动 Linux 操作系统,df -h
或者(以 root 身份)fdisk -l
将为您提供分区信息。