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