源硬盘:大小 500G。210G 数据。使用 hexdump 检查 280G 以外的内容均为零。
hexdump -C /dev/sdd2 --skip 280G --length 10G # all zeroes
目标硬盘:大小为 600G。使用十六进制转储检查 250G 以外的内容均为零(或无用数据)。
hexdump -C /dev/sdc3 --skip 250G --length 10G # all zeroes
我想将所有数据从/dev/sdd2
复制/dev/sdc3
到目标,偏移量为 250G。
仅供参考:挂载后,目标中没有文件。但我不想覆盖前 250G,这样我才有可能从那里恢复一些文件。
dd if=/dev/sdd2 of=/dev/sdc3 skip=0G seek=250K bs=1M count=280K status=progress
我尝试使用dd
上面的命令。它应该可以完成工作。但是,挂载后,目标驱动器中没有显示任何文件。我猜是因为复制的“文件索引表”与原始“文件索引表”混淆了。
答案1
具有文件系统的分区的内容是...嗯,文件系统。通常,您不能取出文件系统的一部分,将其放置在另一个分区的随机偏移处,并期望当您将目标分区传递给命令时它会挂载mount
。
注意:我假设您的“G”表示“GiB”。
正确的方法是这样的:
将源文件系统缩小
/dev/sdd2
到 280 GiB 或更小。使用适合该文件系统的工具。将(分区,而不是其中的文件系统,如果有的话)的起始位置
/dev/sdc3
向右移动 250 GiB。这可以通过删除分区表条目并创建一个具有重新计算的起始扇区和相同结束扇区的新条目来完成。将的内容复制
/dev/sdd2
到新的/dev/sdc3
(与dd
,或任何)。我假设新分区足够大,可以容纳(缩小的)文件系统。或者,在新的 上创建一个新的文件系统
/dev/sdc3
,挂载两个文件系统并将文件从一个文件系统复制到另一个文件系统(例如使用cp -a
或rsync
)。
数据将在开始后 250 GiB 处放置原来的 /dev/sdc3
,但在新分区中,/dev/sdc3
它将是文件系统相对于当前分区开头的位置。所以现在它应该是可挂载的。
之前会有未分配的空间/dev/sdc3
,这就是您希望恢复的数据所在的位置(根据您的说法)。
答案2
你不能那样做。
在磁盘 2 上,在驱动器的前面创建一个 249gb 的任意类型的分区。
现在最好使用 gparted 之类的工具。将所需分区从驱动器 1 复制并粘贴到驱动器 2。
点击应用
等待完成。删除我们之前创建的虚假分区。