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

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

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

1 ответ1

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
      
    • ТОДО: термоусадочная перегородка

  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 - FAILS для меня, это не должно происходить, так как изображение было в порядке, и мы создали идентичную копию изображения !!!

    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 или выполните поиск в Интернете.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .