Переместить файловую систему влево после расширения раздела влево

Так что я просто идиот...

ufw — это интерфейс для iptables, iptables предварительно -установлен на Raspberry Pi и отлично работает вместе с ufw.

0
06.09.2021, 12:50
1 ответ

Это невозможно с помощью fsck. В файловой системе все имеет смещения , и если вы измените начальный сектор, все эти смещения изменятся . fsck просто не имеет возможности повторно -записать все смещения для всех (суперблоков, журналов, каталогов, файловых сегментов и т. д. ). И даже если бы вы могли это сделать, это сработало бы только в том случае, если новый начальный сектор выравнивается со структурами внутренней файловой системы.

Итак, это не сделано.

Вместо этого вам придется сдвинуть все данные влево с помощью dd (по сути, что делает gparted ). Только при полном смещении файловой системы смещения внутри нее останутся нетронутыми.

В принципе, команда dd может работать следующим образом. Он читает и записывает на одно и то же устройство с разными смещениями. Это может работать только для смещения влево,поэтому поиск (запись в)должен быть меньше, чем пропуск (чтение из ). Все блоки в секторах 512b (, если вы укажете bs=1M, ваши разделы должны быть выровнены по МиБ, а все блоки должны быть в МиБ вместо этого)

dd if=/dev/sdx of=/dev/sdx \
   seek=newpartitionstart \
   skip=oldpartitionstart \
   count=filesystemsize

Однако это очень опасно . Используйте его на свой страх и риск. Сначала сделайте резервную копию данных.

Сдвиг вправо был бы более сложным. Вам придется работать в обратном порядке, иначе вы перезапишете данные, которые еще не были прочитаны, и испортите все в процессе.


Единственный известный мне инструмент, который делает это (более или менее )без смещения данных, — это blocks --lvmify, который достигает этого путем преобразования существующего раздела файловой системы в LVM. С LVM вы можете логически расширяться вправо, в то время как физически он хранится слева. Без LVM вы также можете настроить линейное сопоставление устройств вручную, но тогда вы застрянете с нестандартным решением -.


Наиболее разумным подходом к этому типу проблем (, если вы не хотите использовать gparted ), будет создание резервной копии всех данных, затем создание новых разделов и файловых систем в любом удобном для вас формате, а затем восстановление данные.

Если вы используете этот образ dd для резервного копирования, рассмотрите возможность резервного копирования файлов. С образами дисков может быть сложно работать, особенно если вы хотите преобразовать их впоследствии.


Если вашей основной целью является уменьшение требований к объему памяти для файла образа, то вы можетеfstrim(для файловой системы, смонтированной в цикле, -потерять все свободное пространство )илиblkdiscard(для раздела подкачки в цикле -. ] потеря всех данных ).

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

Подобным образом, это опасно,если вы отбросите неправильные части файла изображения, файл изображения будет безвозвратно поврежден. Простое действие по созданию петлевого устройства для файла изображения и его монтированию уже изменяет/повреждает файл изображения.

Если исходным диском является SSD, и он уже регулярно использует fstrim и считывает обрезанные области как двоичный ZERO, вы можете создать уже разреженный образ dd с помощью dd conv=sparse if=/dev/ssd of=ssd.img. Таким образом, любая область двоичных нулей не будет занимать место в файле ssd.img. Обратите внимание, что conv=sparseможет привести к искажению результатов при использовании в другом направлении при восстановлении на ненулевой целевой диск -.

1
06.09.2021, 14:09

Теги

Похожие вопросы