Выход процесса подстановки не в порядке

tl; dr : / dev / sdaX представляет собой раздел. Я думаю, что ваше фундаментальное заблуждение - это разница между файловыми системами и разделами. Раздел действительно прост - в основном это просто раздел диска, который определен в таблице разделов в начале диска. Однако файловая система - это гораздо более продвинутая вещь. Файловая система - это, по сути, структура данных, используемая для отслеживания файлов, которые ядро ​​(в частности, драйвер файловой системы) может читать и записывать. Эта структура данных технически может быть помещена в любое место на диске, но ожидается, что начало структуры данных fs совпадает с началом раздела.

Вы упомянули LVM в своем вопросе - давайте пока забудем об этом, поскольку это более сложная тема (я объясню LVM в конце).

Допустим, у вас есть единственный жесткий диск емкостью 100 ГБ, на котором нет ничего, кроме нулей. В этом случае у вас будет файл / dev / sda , из которого вы можете получить 100 ГБ (хотя, например, du сообщит о нем как о нулевой длине, потому что это специальный блок) и ничего не содержит но нули. / dev / sda - это метод, с помощью которого ядро ​​предоставляет необработанное содержимое устройства пользовательскому пространству для чтения и записи. Вот почему на нем столько же данных, что и на вашем диске, и такое же содержимое, как и на вашем диске. Если вы измените пятый бит на / dev / sda на единицу, а не на ноль, ядро ​​изменит пятый бит на физическом диске для соответствия.На предоставленной вами схеме эта запись будет проходить через интерфейс системного вызова в ядро, затем через драйвер жесткого диска IDE и, наконец, на сам жесткий диск.


Теперь предположим, что вы хотите сделать что-нибудь полезное с этим диском, например, хранить на нем файлы. Теперь вам нужна файловая система. В ядре Linux имеется несколько невероятное количество файловых систем. Каждый из них использует различную структуру данных на диске для отслеживания файлов, и они также могут изменять свои структуры данных по-разному, например, для обеспечения атомарной записи гарантий (т.е. запись либо выполняется успешно, либо не выполняется). 't; никогда не может быть наполовину записанных данных, даже если машина выйдет из строя). Вот что люди имеют в виду, когда говорят о «драйвере файловой системы»: драйвер файловой системы - это фрагмент кода, который понимает, как читать и записывать структуры данных конкретной файловой системы на диск. Примеры включают ext4, btrfs, XFS и т. Д.

Итак, вы хотите хранить файлы. Допустим, вы выбрали ext4 в качестве файловой системы. Теперь вам нужно отформатировать диск так, чтобы на нем существовали структуры данных для пустой файловой системы. Для этого вы используете mkfs.ext4 и указываете ему писать в / dev / sda . mkfs.ext4 запишет пустую файловую систему ext4, начиная с начала / dev / sda . Затем ядро ​​выполнит запись в / dev / sda и применит их к началу физического диска. Теперь, когда диск содержит структуры данных файловой системы, вы можете, например, mount / dev / sda / mnt для монтирования новой файловой системы, перемещения файлов в нее и т. Д. Любая запись в файлы в / mnt будет происходить через интерфейс системных вызовов, затем к драйверу файловой системы ext4 (который знает, как превратить более абстрактную «запись этих данных в такой-то файл» в конкретные изменения, которые необходимо внести в структуры данных fs на диске), затем в IDE драйвер жесткого диска, а затем, наконец, сам диск.


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

Допустим, вы хотите создать две файловые системы на диске, обе по ~ 50 ГБ (т.е. пополам). Сначала вам нужно разбить диск. Для этого вы должны использовать такой инструмент, как fdisk или gdisk , оба из которых создают разные типы таблиц разделов, и вы должны сказать своему инструменту, чтобы он писал в ] / dev / sda . Когда вы закончите разметку, у вас будут / dev / sda , / dev / sda1 и / dev / sda2 . / dev / sda1 и / dev / sda2 - это способ ядра представлять различные разделы на диске.Если вы напишете в начало / dev / sda2 , он будет записывать в начало второго раздела, который находится в в середине диска .

Другой способ объяснить это - поговорить о содержимом / dev / sda . Напомним, что / dev / sda бит-в-бит,содержимое физического жесткого диска. А / dev / sda1 - побитовое содержимое первого раздела жесткого диска. Это означает, что / dev / sda содержит небольшой фрагмент данных - заголовок раздела - за которым следует точное содержимое / dev / sda1 , затем / dev / sda2 . / dev / sda1 и / dev / sda2 сопоставлены с определенными регионами на диске, которые являются разделами, которые вы настроили.

Отсюда мы можем снова использовать mkfs.ext4 для создания файловой системы на / dev / sda1 , которая будет записывать на диск, начиная с заголовка раздела. Если мы используем mkfs.ext4 на / dev / sda2 , он будет записывать, начиная с начала раздела, который находится в середине диска (и, следовательно, в середине / dev / sda ).

Теперь вы можете, например, монтировать / dev / sda2 / mnt . Это говорит ядру читать данные файловой системы, начиная с начала второго раздела, и открывать их вам в более удобной форме - то есть файлы и каталоги в местоположении / mnt . Опять же, ядро ​​использует драйвер файловой системы для фактического выполнения этого сопоставления.


А теперь коротко поговорим о LVM. LVM - это просто абстракция разделов. Разделы очень и очень точно соответствуют физическим местоположениям на диске. В приведенном выше примере с двумя разделами предположим, что вы хотите удалить первый раздел и расширить второй на освободившееся пространство.Поскольку разделы сопоставляются непосредственно с областями диска, единственный способ сделать это - физически переместить все 50 ГБ данных раздела в начало диска, а затем развернуть раздел до конца.

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

Для получения дополнительных сведений о том, как работает LVM, см. Этот ответ: https://unix.stackexchange.com/a/106871/29146

16
10.11.2017, 19:29
0 ответов

Теги

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