Как разделить раздел NTFS на меньший диск, не имея места для полного образа
Время от времени у меня возникает следующая проблема:
Диск выходит из строя, а диск замены меньше. Данные часто легко помещаются на меньший диск, но 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/loop0p1TODO: термоусадочная перегородка
(ненужный, потому что сжатый не увеличенный?) удалить и воссоздать устройства петли, потому что размер раздела изменился
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не может получить доступ к изображению: execchkdsk /fиз окон на исходном диске. Не использоватьntfsfix, Любая проверка NTFS для Linux?Если
kpartxневозможно создать петлевые устройства: проверьте с помощьюlosetupи удалите неиспользованные.Если вы хотите избавиться от устаревших устройств петли, удалите с
sudo losetup -dили поиск в Интернете.