Как разделить раздел NTFS на меньший диск, не имея места для полного образа

Время от времени у меня возникает следующая проблема:

Диск выходит из строя, а диск замены меньше. Данные часто легко помещаются на меньший диск, но partclone просто не сжимает файловую систему, чтобы соответствовать меньшему размеру раздела.

Вы можете просто скопировать весь диск на временный диск и затем сжать его. Но не хватает ли места?

1 ответ

С пункта 16 не работает. Возможно, потому что там было устаревшее устройство петли, которое я не удалял.

partclone сырой дамп в разреженное изображение

Это решение опасно для ваших данных. Попробуйте, только если вы понимаете, что делаете, и знакомы с dd и устройства. Я не буду нести ответственность за любую потерю данных.

Прежде чем мы начнем:

  • Не используйте эту процедуру для зеркалирования диска, который физически поврежден, потому что

    • partclone нужна здоровая файловая система для работы

    • эта процедура гораздо сложнее, чем делать dd так что вам, вероятно, придется повторить это несколько раз, пока вы не добьетесь успеха - что приведет к увеличению нагрузки на сломанный диск

    • для сломанных дисков вы должны использовать safecopy вместо того, чтобы dd прерывает работу в плохих секторах

  • Вам нужно до 2 x свободного места на временном диске.

  • Я войду sdXX для любой команды, которая может уничтожить данные, если вы забыли настроить команду. Это не относится к циклам, поэтому НЕ используйте никакие другие устройства циклов во время следующего процесса, чтобы избежать случайного переопределения ценных данных.

  • Если вы где-то потерпели неудачу и удалили изображение, обязательно сначала размонтируйте все, что указывает на него, а затем удалите петлевые устройства: kpartx -dv <image>, Это может вызвать серьезные проблемы, если вы используете неправильные петлевые устройства! Я считаю, что моя проблема вызвана устаревшим устройством петли...

  • Найдите исправления для распространенных проблем в конце этого ответа.

Поехали

  1. получить размер вашего исходного диска

    sudo fdisk -l /dev/sda
    output: Disk /dev/sda: 465,8 GiB, 500107862016 bytes, 976773168 sectors
    
  2. читать исходный макет раздела в изображение

    sudo dd if=/dev/sda of=sparse.img bs=1M count=1
    
  3. заполните изображение "ничем" до указанного выше размера. - Это не займет места на диске.

    sudo dd if=/dev/zero of=sparse.img bs=1 count=0 seek=500107862016
    
  4. проверьте, не активны ли другие петлевые устройства - если выход не пустой, см. раздел устранения неполадок

    losetup -l -a 
    
  5. проверьте, совпадает ли расположение разделов с исходным диском

    fdisk -l sparse.img
    
  6. создание петлевых устройств для доступа к разделам в изображении

    sudo kpartx -av sparse.img 
    output: add map loop0p1 (253:0): 0 976771072 linear 7:2 2048
    
  7. читать данные в изображение, используя partclone - это увеличит использование пространства на "размер данных" плюс "накладные расходы".

    sudo partclone.ntfs -s /dev/sda1 -o /dev/mapper/loop0p1 -b -L sparse.log
    
  8. удалить исходный диск, чтобы сохранить его

  9. сжимать, используя gparted - должен быть как минимум на 10% меньше, чем целевой диск

    • создавать ссылки, потому что gparted не понимает разработчиков kpartx создано.

      ln -s /dev/mapper/loop0p1 sparse.img1
      
    • использование gparted сжать раздел

      sudo gparted sparse.img
      
  10. В качестве альтернативы вы можете уменьшить, используя ntfsresize но вы должны сжать раздел тоже потом.

    • получить минимальный размер

      sudo ntfsresize -i /dev/mapper/loop0p1
      
    • изменить размер теста

      sudo ntfsresize -n -s 100G /dev/mapper/loop0p1
      
    • реальное изменение размера - это увеличит использование пространства до "размера данных"

      sudo ntfsresize -s 100G /dev/mapper/loop0p1
      
    • TODO: термоусадочная перегородка

  11. (ненужный, потому что сжатый не увеличенный?) удалить и воссоздать устройства петли, потому что размер раздела изменился

    sudo kpartx -dv sparse.img 
    sudo kpartx -av sparse.img 
    
  12. (необязательно) усеченное изображение TODO

  13. проверить с помощью ntfsresize - для меня это дает хороший ответ

    sudo ntfsresize -i /dev/mapper/loop0p1
    
  14. вставьте целевой диск - проверьте, правильно ли вы вставили диск

  15. (не работает, потому что ntfsresize пометил фс грязно) partclone образ на новый диск

    sudo partclone.ntfs -o /dev/sdXX -s /dev/mapper/loop0p1 -b -L restore.log
    
  16. вместо dd образ на новый диск - либо не указывайте размер, либо превышайте размер уменьшенного раздела на 10%

    sudo dd if=sparse.img of=/dev/sdXX
    
  17. проверить с помощью ntfsresize - Не удается, это не должно происходить, так как изображение было в порядке, и мы создали идентичную копию изображения!!!

    sudo ntfsresize -i /dev/sda1
    
  18. удалить устройства петли

    sudo kpartx -dv sparse.img
    
  19. удалите все петлевые устройства, которые не были удалены должным образом - если они все еще сохраняются, перезагрузите компьютер или поищите в Интернете.

    sudo losetup -D 
    
  20. Наконец, вы должны попробовать загрузить диск, а затем запустить Windows chkdsk / f, После этого использования gparted расширить раздел до его полного размера.

Поиск проблемы:

  • Если ntfsresize или же gparted не может получить доступ к изображению: exec chkdsk /f из окон на исходном диске. Не использовать ntfsfix, Любая проверка NTFS для Linux?

  • Если kpartx невозможно создать петлевые устройства: проверьте с помощью losetup и удалите неиспользованные.

  • Если вы хотите избавиться от устаревших устройств петли, удалите с sudo losetup -d или поиск в Интернете.

Другие вопросы по тегам