LINUX.ORG.RU

расширить ext4 вниз

 ,


0

2

необходимо расширить раздел с ext4 вниз. понятно, что напрямую этого не сделать.
пока что придумал вот так:

  1. скопировать все структуры ext4 с раздела.
  2. поменять данные о размере раздела в суперблоке.
  3. во всех файловых inode прибавить к адресам блоков число блоков, добавляемое к разделу.
  4. то же самое проделать с Extent Tree.
  5. удалить старый раздел, создать новый - с меньшим адресом начала, записать исправленные структуры ext4 в начало.
  6. ???
  7. PROFIT!!!

теперь вопросы:

  • все ли это, что необходимо?
  • есть какие-то средства автоматизации? если суперблок я могу поправить руками, то все 100500 inode - нет. или, может быть, знатоки ext4 помогут мне написать awk/sed-скрипт для этих целей?

Отличный план! Пиши скорее, народ жаждет этой утилиты уже 15 лет!

anonymous
()

понятно, что напрямую этого не сделать.

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

В начале размонтируете раздел, далее запускаете dd с указанием считывать 1Kb блоки, в качестве устройства приёмника указываете этот же диск, но указываете параметр seek, в котором указываете сколько 1Kb блоков нужно пропустить с начала диска, в параметре count указываете текущий размер раздела в 1Kb блоках, указываете параметр bs=1K, т.е. размер блока, которым оперирует dd равным 1Kb (1 килобайту). Есетственно нижняя граница раздела должна быть кратна 1Kb. Если это не так, то либо подбирайте другой размер блока (bs) и прочие параметры, либо подбирайте нижнюю границу. 1Kb блок - это два сектора по 512 байт.

После завершения перемещения раздела создаёте новую запись в таблице разделов посредством fdisk и раширяете файловую систему посрдеством resize2fs.

Как видите, операция довольно проста, по крайней мере гарантирует почти 100% результат, по сравнению с тем, что описали вы.

Удачи.

kostik87 ★★★★★
()

все ли это, что необходимо?

lvm, lvextend

anonymous
()
Ответ на: комментарий от kostik87

но ведь в inode указаны относительные адреса. если воспользоваться вашим решением (которое является частью моего), я потеряю все свои файлы.

Lincor
() автор топика
Ответ на: комментарий от Lincor

но ведь в inode указаны относительные адреса.

Относительно начала файловой системы.

которое является частью моего

Не вижу в предложенном вами алгоритме ни слова о dd, у вас там вообще муть написана.

Я вам попросту предложил передвинуть раздел целиком вниз, изменить запись в таблице разделов и расширить файловую систему до нового размера раздела.

скопировать все структуры ext4 с раздела. поменять данные о размере раздела в суперблоке. во всех файловых inode прибавить к адресам блоков число блоков, добавляемое к разделу. то же самое проделать с Extent Tree. удалить старый раздел, создать новый - с меньшим адресом начала, записать исправленные структуры ext4 в начало.

Вот этого ничего в предложенном мной варинте нет.

Удачи.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Относительно начала файловой системы.

а оно смещается вниз. соответственно, все inode становятся некорректными.

Не вижу в предложенном вами алгоритме ни слова о dd, у вас там вообще муть написана.

копировать/записывать как раз можно с помощью dd.

Я вам попросту предложил передвинуть раздел целиком вниз

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

Lincor
() автор топика
Последнее исправление: Lincor (всего исправлений: 2)

это что за нахер. Linux director suite Дениса Попова?

darkenshvein ★★★★★
()

gparted может подвинуть раздел, но это долго + нужно грузится с livecd/liveusb. насчёт безопастности такого действия gparted честно предупреждает, если вы двигаете таким образом данные и у вас нет на них бэкапов, вы ссзб.

dhampire ★★★
()
Ответ на: комментарий от dhampire

в ОП речь о расширении раздела вниз без перемещения собственно данных (их может быть очень много), только метаданных ФС.

Lincor
() автор топика
Ответ на: комментарий от Lincor

а оно смещается вниз. соответственно, все inode становятся некорректными.

Смещается весь раздел, а точнее файловая система целиком вниз, а затем расширяется.

а, ну тогда понятно. это не совсем то, что нужно

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

поскольку раздел очень большой и его перемещение целиком займет чересчур много времени.

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

То что вы предлагаете с большой долей вероятности приведёт к потере всех данных на файловой системе.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

То что вы предлагаете с большой долей вероятности приведёт к потере всех данных на файловой системе.

если все правильно учесть - не приведет.

Lincor
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.