Почему мы не можем эффективно расширять разделы влево?

Почему мы не можем эффективно расширять разделы влево?

Современные файловые системы, такие как ext4 и btrfs, поддерживают изменение размера. Даже те, которые изначально не поддерживают это, например FAT, имеют сторонние инструменты, которые поддерживают это в любом случае. Но они всегда поддерживают расширение вправо, а не напрямую влево.

Расширение влево выполняется путем копирования раздела влево (байт в байт во многих случаях) и последующего расширения вправо. Каждый ответ на вопрос, который How do I extend a partition to the leftя когда-либо видел, был backup, delete partition, make a new partition.

Разве это не так просто, как изменить границу раздела, а затем переместить/обновить таблицы инодов?

решение1

Но они всегда поддерживают расширение вправо, а не прямо влево.

Вероятно, вы имеете в виду представления HDD/SSD, которые используют линейный массив секторов или логических блоков.
Самый левый сектор/блок будет иметь (абсолютный) логический адрес блока (LBA) 0.
Самый правый сектор/блок будет концом диска и иметь самый большой LBA.
Обратите внимание, что LBA обычно представлен беззнаковым 48-битным целым числом в интерфейсе ATA.

Расширение влево осуществляется путем копирования раздела влево (во многих случаях побайтно) и последующего расширения вправо.

Это не точное описание.
Вместо того, чтобы"копирование"раздел, раздел перемещается путем его перемещения, сектор/блок за сектором/блоком (не"байт за байтом").

Разве это не так просто, как изменить границу раздела, а затем переместить/обновить таблицы инодов?

Очевидно, нет, поскольку такая операция никогда не предлагалась.

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

Файловая система, определенная для раздела, будет использовать LBA.родственникк началу раздела.
Файловая система не заботится и не знает о положении своего раздела на HDD/SSD.
Файловая система знает только LBA, начинающиеся с 0 (начало раздела) через LBA, соответствующий концу раздела.
Используя относительную адресацию, файловая система блокируется (и, следовательно, гарантируется) от доступа к любому сектору/блоку за пределами своего раздела.

Если"изменение границы раздела"означает переопределение начала раздела без перемещения файловой системы в новое начало раздела, то это создает неразрешимые сценарии.

Если вы попытаетесь использовать существующие LBA, то новая область раздела будет иметь LBA, которые меньше нуля, что не может быть представлено беззнаковыми целыми числами. Поэтому нет способа адресовать вновь созданную область «слева» от исходного раздела.

Если вы попытаетесь пересчитать каждый LBA, хранящийся в файловой системе, в его новое относительное значение, то вы попытаетесь решить почти невыполнимую задачу по поиску каждого LBA в файловой системе. Проигнорируйте любой LBA, и вы гарантированно получите повреждение файловой системы.
Даже если вам удастся обновить каждый LBA, файловая система может затем показаться поврежденной, поскольку обычно существуют определенные сущности файловой системы, которые должны быть расположены в определенных (относительных) LBA. Но"изменение границы раздела"изменил расположение тех объектов, которые должны находиться в фиксированных (относительно начала раздела) LBA.

В конечном итоге начало раздела и положение файловой системы в этом разделе должны быть согласованы.

Связанный контент