我时不时地遇到以下问题:
磁盘发生故障,替换磁盘较小。数据通常很容易适合较小的磁盘,但partclone根本不会缩小文件系统以匹配较小的分区大小。
您可以简单地将整个磁盘映像到临时驱动器上然后缩小。但如果没有足够的空间?
我时不时地遇到以下问题:
磁盘发生故障,替换磁盘较小。数据通常很容易适合较小的磁盘,但partclone根本不会缩小文件系统以匹配较小的分区大小。
您可以简单地将整个磁盘映像到临时驱动器上然后缩小。但如果没有足够的空间?
Answers:
从第16点开始不起作用。也许是因为有一个陈旧的循环设备我没有删除。
partclone
原始转储到稀疏图像 此解决方案对您的数据很危险。只有在你明白自己在做什么并且熟悉的情况下才能尝试 dd
和设备。我不对任何数据丢失负责。
在我们开始之前:
请勿使用此过程镜像物理损坏的磁盘,因为
partclone
需要一个健康的文件系统来工作
这个程序比做的复杂得多 dd
所以你可能需要多次重复它才能成功 - 给损坏的磁盘带来更大的压力
对于你应该使用的破碎磁盘 safecopy
而是因为 dd
在坏道上中止
你需要最多 2 x数据大小的可用空间 在你的临时驱动器上。
我会进去的 sdXX
对于任何可能会在您忘记自定义命令时破坏数据的命令。这不涉及循环,所以一定要 不使用任何其他循环设备 在以下过程中,以避免意外地覆盖有价值的数据。
如果您在某处失败并删除了图像,请务必首先卸载指向它的任何内容,然后删除循环设备: kpartx -dv <image>
。 如果使用错误的循环设备,可能会导致严重问题! 我相信我的问题是由陈旧的循环设备造成的......
在本答案的最后找到常见问题的修复程序。
我们走吧
获取源磁盘的磁盘大小
sudo fdisk -l /dev/sda
output: Disk /dev/sda: 465,8 GiB, 500107862016 bytes, 976773168 sectors
将原始分区布局读入图像
sudo dd if=/dev/sda of=sparse.img bs=1M count=1
用“无”填充图像,直到上面的大小。 - 这将 不 占用磁盘上的任何空间。
sudo dd if=/dev/zero of=sparse.img bs=1 count=0 seek=500107862016
检查没有其他循环设备处于活动状态 - 如果输出不为空,请参阅故障排除部分
losetup -l -a
检查分区布局是否与源驱动器相同
fdisk -l sparse.img
创建循环设备以访问映像中的分区
sudo kpartx -av sparse.img
output: add map loop0p1 (253:0): 0 976771072 linear 7:2 2048
使用将数据读入图像 partclone
- 这会增加“数据大小”加上“开销”的空间使用量。
sudo partclone.ntfs -s /dev/sda1 -o /dev/mapper/loop0p1 -b -L sparse.log
删除源驱动器以保存它
缩小使用 gparted
- 应至少比目标驱动器小10%
创建链接因为 gparted
不了解开发者 kpartx
创建。
ln -s /dev/mapper/loop0p1 sparse.img1
使用 gparted
缩小分区
sudo gparted sparse.img
或者你可以缩小使用 ntfsresize
但是你也必须缩小分区。
得到最小尺寸
sudo ntfsresize -i /dev/mapper/loop0p1
测试调整大小
sudo ntfsresize -n -s 100G /dev/mapper/loop0p1
真正调整大小 - 这将增加空间使用量达到“数据大小”
sudo ntfsresize -s 100G /dev/mapper/loop0p1
TODO:缩小分区
(不必要因为收缩不扩大?) 删除并重新创建循环设备,因为分区大小已更改
sudo kpartx -dv sparse.img
sudo kpartx -av sparse.img
(可选)TODO 截断图像
检查使用 ntfsresize
- 对我来说,这给了一个好的答案
sudo ntfsresize -i /dev/mapper/loop0p1
插入目标驱动器 - 仔细检查你插入了正确的驱动器
(不起作用,因为 ntfsresize
标记fs脏) partclone
图像到新驱动器
sudo partclone.ntfs -o /dev/sdXX -s /dev/mapper/loop0p1 -b -L restore.log
代替 dd
图像到新驱动器 - 或者不给出大小或者比缩小的分区大小大10%
sudo dd if=sparse.img of=/dev/sdXX
检查使用 ntfsresize
- FAILS对我来说,这不应该发生,因为图像还可以,我们创建了相同的图像副本!
sudo ntfsresize -i /dev/sda1
删除循环设备
sudo kpartx -dv sparse.img
删除任何未被彻底删除的循环设备 - 如果还有一些持续存在,请重启或在网上搜索。
sudo losetup -D
最后你应该尝试启动磁盘然后运行Windows chkdsk / f
。在那之后使用 gparted
将分区扩展到它的完整大小。
如果 ntfsresize
要么 gparted
无法访问图像:exec chkdsk /f
来自源磁盘上的Windows。不使用 ntfsfix
。 Linux的任何NTFS检查程序?
如果 kpartx
无法创建循环设备:检查 losetup
并删除未使用的。
如果你想摆脱过时的循环设备删除 sudo losetup -d
或搜索网络。