我时不时会遇到以下问题:
磁盘发生故障,而替换磁盘较小。数据通常可以轻松装入较小的磁盘,但 partclone 不会缩小文件系统以匹配较小的分区大小。
您可以简单地将整个磁盘映像到临时驱动器上,然后缩小。但如果空间不足呢?
答案1
从第 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
(由于文件系统被标记为脏,所以不起作用)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
-对我来说失败了,这不应该发生,因为图像没有问题,而且我们创建了图像的相同副本!!!sudo ntfsresize -i /dev/sda1
删除循环设备
sudo kpartx -dv sparse.img
删除所有未完全移除的循环设备 -如果仍然存在问题,请重新启动或在网上搜索。
sudo losetup -D
最后,您应该尝试启动磁盘,然后运行 Windows
chkdsk / f
。之后使用gparted
将分区扩展至其最大大小。
故障排除:
如果
ntfsresize
或gparted
无法访问映像:chkdsk /f
从源磁盘上的 windows 执行。请勿使用ntfsfix
。有适用于 Linux 的 NTFS 检查器吗?如果
kpartx
无法创建循环设备:请检查losetup
并删除未使用的设备。如果您想摆脱过时的循环设备,请删除
sudo losetup -d
或搜索网络。