linux loop device что это
Linux loop device что это
Другой пример смотрите в losetup(8).
Для шифрования и расшифровки каждому закольцованному устройству может быть назначена функция обмена.
Для закольцованного блочного устройства доступны следующие операции ioctl(2):
LOOP_SET_FD Связывает закольцованное устройство с открытым файлом, чей файловый дескриптор передаётся в третьем аргументе ioctl(2). LOOP_CLR_FD Отвязывает закольцованное устройство от файлового дескриптора. LOOP_SET_STATUS Назначает состояние (передаваемое в третьем аргументе ioctl(2)) закольцованному устройству. Данный аргумент представляет собой указатель на структуру loop_info, определённую в следующим образом:
Типом шифрования (lo_encrypt_type) должно быть одно из значений: LO_CRYPT_NONE, LO_CRYPT_XOR, LO_CRYPT_DES, LO_CRYPT_FISH2, LO_CRYPT_BLOW, LO_CRYPT_CAST128, LO_CRYPT_IDEA, LO_CRYPT_DUMMY, LO_CRYPT_SKIPJACK или LO_CRYPT_CRYPTOAPI (начиная с Linux 2.6.0).
Поле lo_flags представляет собой битовую маску, в которой может быть ноль или несколько следующих значений:
LO_FLAGS_READ_ONLY Закольцованное устройство доступно только для чтения. LO_FLAGS_AUTOCLEAR (начиная с Linux 2.6.25) Закольцованное устройство автоматически уничтожится после закрытия. LO_FLAGS_PARTSCAN (начиная с Linux 3.2) Разрешено автоматическое сканирования разделов. LOOP_GET_STATUS Получить состояние закольцованного устройства. В третьем аргументе ioctl(2) должен быть задан указатель на структуру struct loop_info. LOOP_CHANGE_FD (начиная с Linux 2.6.5) Поменять источник данных (backing store) закольцованного устройства на новый файл, определяемый файловым дескриптором, указанным в третьем аргументе ioctl(2), представленный целым числом. Данная операция допустима только, если закольцованное устройство доступно только на чтение и новый источник данных имеет тот же размер и тип, использованный ранее. LOOP_SET_CAPACITY (начиная с Linux 2.6.30) Изменить размер используемого (live) закольцованного устройства. Можно изменить размер используемого источника данных, а затем применить эту операцию для того, чтобы драйвер закольцованных устройств учёл новый размер. У этой операции нет аргументов.
Начиная с Linux 2.6, появилось две новые операции ioctl(2):
LOOP_SET_STATUS64, LOOP_GET_STATUS64 Они подобны описанным выше LOOP_SET_STATUS и LOOP_GET_STATUS, но используют структуру loop_info64, в которой есть несколько дополнительных полей, а некоторым другим полям назначены типы с большим диапазоном значений:
Устройство петли может допускать некоторую обработку данных во время этого перенаправления. Например, устройство может быть незашифрованной версией зашифрованного файла. В таком случае файл, связанный с устройством петли, может быть другим псевдоустройством. Это в основном полезно, когда это устройство содержит зашифрованную файловую систему. Если поддерживается, устройство цикла в этом случае является дешифрованной версией исходного зашифрованного файла и, следовательно, может быть смонтировано, как если бы это была обычная файловая система.
СОДЕРЖАНИЕ
Использование петлевого монтажа
После монтирования файла, содержащего файловую систему, к файлам в этой системе можно будет получить доступ через обычный интерфейс файловой системы операционной системы без каких-либо специальных функций, таких как чтение и запись в ISO-образы в приложениях.
Петлевой монтаж имеет несколько применений. Это удобный метод автономного управления и редактирования образов файловой системы, которые в дальнейшем используются для нормальной работы системы. Сюда входят образы CD или DVD или системы установки. Его можно использовать для установки операционной системы в файловую систему без повторного разбиения диска. Он также обеспечивает постоянное разделение данных, например, при имитации съемных носителей на более быстром и удобном жестком диске или инкапсуляции зашифрованной файловой системы.
Доступность
Различные Unix-подобные операционные системы предоставляют функции устройства контура, используя разные имена.
Пример
Для монтирования файла, содержащего образ диска, в каталог требуется два шага:
Эти две операции могут быть выполнены либо с помощью двух отдельных команд, либо с помощью специальных флагов для команды mount. Первая операция может выполняться такими программами, как losetup в Linux или lofiadm в SunOS. Например, если example.img это обычный файл, содержащий файловую систему, и /home/you/dir каталог пользователя Linux, суперпользователь (root) может смонтировать файл в каталоге, выполнив следующие две команды:
Чтобы определить доступное устройство петли для использования в приведенных выше командах, суперпользователь (root) может использовать:
Утилита mount обычно способна обрабатывать всю процедуру:
Затем устройство можно размонтировать с помощью следующей команды:
В интерфейсе прикладного программирования нижнего уровня ( API ) ассоциация и разъединение файла с устройством цикла выполняется с помощью системного вызова ioctl на устройстве цикла.
Записки дебианщика
В этом блоге публикуются заметки и решения, найденные в процессе работы, освоения и жизни в дистрибутиве Debian GNU/Linux.
Шифрование разделов и файлов в Linux с помощью loop-device и AES алгоритма
Способов шифрования в Linux много, но в данном случае будет показан простой и быстрорастворимый метод с использованием cryptoloop. С его помощью мы можем шифровать как отдельные разделы (например, создать зашифрованный раздел на флешке), либо сделать криптофайл (зашифрованный файл, внутри которого хранятся ценные данные). Последнее особенно удобно для личного применения.
Немного юниксвея
Шифрование раздела на физическом носителе и создание криптофайла на самом деле для UNIX будут выглядеть одинаково. Это есть следствие принципа UNIX » всё есть файл «, над которым стоит немного помедитировать. Так, в посте о монтировании разделов уже приводился пример того, как можно примонтировать ISO-образ файла в Linux и получить доступ к файлам. Хотелось бы подчеркнуть этот факт ещё раз:
Понимание этого факта важно для последующего изложения, и вообще важно для работы в Linux, а не только тыкания по кнопкам в KDE/GNOME.
Два слова о петлевом устройстве (Loop-device)
Loopback Device (loop) это механизм ядра Linux, используемый для интерпретации файлов как реальных блочных устройств. Главное, что все инструменты, используемые для работы с реальными дисками (например mount), могут быть использованы и для петлевых устройств.
Говоря простыми словами, loop нужен для того, чтобы структурированные файлы (ISO-образы, копии разделов с флешек, шифрованные файлы) для ядра выглядели, как реальные диски. В посте о монтировании разделов был пример с ISO-образом
mknod /dev/loop8 b 7 8
mknod /dev/loop9 b 7 9
Главное, чтобы поддержка loopback-device была в ядре Linux (если вы его не собирали сами, она там скорее всего есть). Больше о петлевых устройствах можно прочитать тут, там и здесь.
Установка и подготовка к работе
Для cryptoloop нам потребуется установить небольшой пакет:
sudo aptitude install loop-aes-utils
Итак, начинаем подготавливать криптораздел\криптофайл, куда мы скопируем ценные данные и зашифруем.
0. Создание криптофайла или криптораздела
Если мы хотим создать один большой файл, который будет содержать зашифрованные файлы, делаем это так:
crypto.file bs=1M count= 30
В данном примере это файл на 30 Мб, но при нужде можно сделать сколько угодно.
1. Связываем устройство с loop device (петлевым устройством) с использованием шифрования
В случае криптофайла:
2. Форматирование зашифрованного раздела или файла
После того, как мы связали устройство или файл с loop-device, нужно его отформатировать:
В этом примере мы отформатировали на файловую систему Ext2, но можно использовать любую.
3. Перенос данных и работа с зашифрованным разделом или файлом
Работаем с петлевым устройством, как с обычным разделом: монтируем, записываем на него данные и так далее. Монтирование зашифрованного раздела или файла выглядит так:
mkdir /mnt/cryptodisk
mount /dev/loop0 /mnt/cryptodisk
4. Окончание работы с криптофайлом\криптоустройством
После отмонтирования нужно отвязать устройство или файл от петлевого устройства:
Теперь петлевое устройство свободно, данные зашифрованы, враг не пройдёт.
Вас снова попросят ввести пароль, который нужен для доступа к вашим файлам.
Теперь мы имеем раздел или файл, который невозможно примонтировать просто так (он зашифрован и Linux не увидит на нем файловую систему). Но после прикручивания к петлевому устройству все данные будут доступны (если вы знаете пароль, разумеется).
Лирическое отступление
Не хотелось бы разочаровывать начинающих криптоанархистов, но ребята с xkcd в общем реалистично смотрят на вещи:
Тем не менее, светить своими данными не комильфо, и какое-то время вы выиграете.
26 комментариев: |высказаться!| RSS-лента дискуссии.|
Насколько я помню, loop-aes никогда не включали в официальное ядро, т.е. это левый патч. Одно время его добавляли при сборке ядра в Debian (например, в Lenny), но начиная со Squeeze прекратили.
Поэтому лучше все-таки через штатный cryptsetup.
правильно это делать через lvm. там можно совершать все действия онлайн, перенося данные с одного физ диска на другой, шифруюя, сжимая и разжимая.
Мы с тобой одновременно написали про шифрование http://libc6.org/page/perenos-home-na-zashifrovannyj-razdel
По поводу лирического отступления вспомнилось одно из суждений Инь Фу Во 🙂
Однажды инженер Чжа Вынь обратился к Учителю:
– Один достойный уважения человек сказал мне, что шифровать электронную почту неправильно. Поскольку честному человеку нечего скрывать, шифрованная переписка неизбежно привлечёт внимание Охранительного ведомства. Учитель, что вы об этом думаете?
Инь Фу Во ответил:
– Благородный муж имеет чувство стыдливости. Он закрывает одеждой свою наготу. Вовсе не потому, что лицезрение другими принесёт ему ущерб. Но такова воля Неба, и таков ритуал. Честному человеку есть, что скрывать.
Одно время его добавляли при сборке ядра в Debian (например, в Lenny), но начиная со Squeeze прекратили.
А это, в Сквизи оно в репах тоже есть. Должно ж работать.
Поэтому лучше все-таки через штатный cryptsetup.
Что-то у меня оно не завелось в своё время. Анонимус намекает, что стоит попробовать ещё раз? 🙂
или btrfs.
Кхм. я в общем-то хочу получить свои зашифрованные данные обратно, знаете ли. Для безвозвратного уничтожения данных есть менее экзотические методы 🙂
@librarian комментирует.
Мы с тобой одновременно написали про шифрование
Это да. Ну так Большой Брат наступает, вот параноики и зашевелились :-))
Кстати, я на твой пост ссылку поставил. И да, Librarian, твой дискас не переваривает блоггеровские OpenID. Покрути его 🙂
@Livid комментирует.
По поводу лирического отступления вспомнилось одно из суждений Инь Фу Во
Очень поучительная история. Любому человеку всегда есть, что скрывать. Или, скажем так, есть то, что правительству знать необязательно. 🙂
Как всегда гуд, однако давно использую EncFS 🙂
@Михаил Саушкин комментирует.
Как всегда гуд, однако давно использую EncFS
Михаил, а оно секурно? Меня смущает вот это (из википедии):
2. Fragmentation of the encrypted volume causes fragmentation of the filesystem containing the source directory.
3. Anyone having access to the source directory is able to see how many files are in the encrypted filesystem
В частности, за возможность создания зашифрованного контейнера с «двойным» дном, т.е. двух уровней правдоподобного отрицания, на случай рассекречивания паролей.
Спасибо за пост! Про cryptsetup знал, а про это нет. Хотя на практике шифрования не юзал, нет у меня ничего тайного и криминального 🙂
В debian-russian был не так давно правильный тред на эту тему.
Сухая выжимка: надо использовать cryptsetup с форматом LUKS. В качестве алгоритма на сегодня правильнее всего aes-xts-plain
Ссылки на аргументацию можно найти в треде. http://lists.debian.org/debian-russian/2012/04/msg00012.html
> А это, в Сквизи оно в репах тоже есть. Должно ж работать.
> XXKB
Вы, конечно, имели в виду xkcd 🙂
cryptoloop- это ж старо как говно мамонта, его не рекомендовали использовать еще года четыре назад. cryptsetup, dmcrypt- вот современные решения. encfs же хорош для того, чтоб не ограничивать место для данных, и с другой стороны не занимать лишнее. truecrypt- единственный плюс-правдоподобное отрицание,в остальном не лучше/хуже dmcrypt
> 3. Anyone having access to the source directory is able to see how many files are in the encrypted filesystem
Меня это не смущает 🙂 Главное, не заморачиваюсь с размером, и приходится синхронизировать не весь образ, а только изменённые данные. Зашифрованный том 2 Г по сети не погоняешь 🙂
Кстати, в шифрованных папках винды не тока количество, но и названия файлов видны всем желающим. Такая вот защита 🙂
Приветствую, Михаил! «В нашем полку прибыло!» (с) :)))
Оч-ч-чень правильный подход: заюзать петлю!
Посоветовал бы только (в преддверии наступления Б.Б. 😉 ну, и для просвещения «новичков» джеймсов-бондов и прочих 007 ;)) при юзании подобной технологии создавать для себя набор скриптиков, которые однозначно и безошибочно выполняли бы нужные команды. И конечно поместить их в заветну папочку, типа SecurityTools или там НиктоНеДолженЗнатьЭТО! 🙂
А набор команд необходим и достаточен такой: Создать, Подключить, Отключить, Уничтожить. ТОЧКА! Всё что нужно для собственного спокойствия держать у себя под рукой. Ну, и создано это будет истинно в Ъ юниксвэйном стиле :)))
Хинт. Конечно, при нужде в интерактивном вводе параметров (начиная с пасспараша) можно как (а) ограничиться терминалом, так и пойти на *незначительные* затраты труда (тем кто умеет юзать шелл+граф.оболочки к gtk) заюзать (б) граф. расширение для получения приятной междумордочки, что вызовется при нужде ввода параметров для каждого этого скриптика. Тогда это почти. «коммерческая» 😉 разработка! Но! «Просто, как всё гениальное»! 🙂
Прошу простить за этот как бы оффтопик. Или считайте это подсказкой материала для будущих статей Вашего замечательного блога, который я с удовольствием (увы «поздно» наткнувшись случайно) начал читать на днях.
@Lion9 комментирует.
Использую Truecrypt
По мне так это overkill для личных нужд. Мне этот метод нравится простотой.
@Vlsu комментирует.
Хотя на практике шифрования не юзал, нет у меня ничего тайного
Есть. Личные документы и всякие весёлые картинки можно истолковать по-разному.
@GQ комментирует.
В debian-russian был не так давно правильный тред
О да, там же Рыцари Света и Правды. Всё знают, всё умеют, но никому от этого не легче. Включая их же дебиановской вики, за которую мне приходится краснеть (дебианщик, а пользуюсь либо Gentoo Wiki, либо Arch Wiki).
надо использовать cryptsetup с форматом LUKS.
Добавил в список альтернатив. Спасибо.
@Анонимный комментирует.
В репах (включая Sid) есть только юзерспейсная часть
Шайтан. Я Анонимусу признаюсь по секрету: пост писался дома, а дома ноут с Ленни. Сквизи на работе, так что посыпаю голову пеплом.
@Andrew Kravchuk комментирует.
Вы, конечно, имели в виду xkcd
Пофиксено, спасибо.
@Анонимный комментирует.
cryptoloop- это ж старо как говно мамонта
Анонимус говорит, что софт старый, как будто в этом есть что-то плохое. Расскажите это поклонникам Фортрана, которому полвека, любителям латеха, которому за тридцать, и пользователям Матлаба, которому тоже не меньше 20 лет. Если оно старое, это не значит, что надо вышвырнуть и написать заново.
cryptsetup, dmcrypt- вот современные решения
Никто не спорит.
encfs же хорош
Ой ли?
truecrypt- единственный плюс-правдоподобное отрицание
Заваривать долго. 🙂
@Михаил Саушкин комментирует.
Меня это не смущает
Ну и зря. Когда придут ребята в штатском и спросят, что это за файл «10yroldlollypr0n» что будем отвечать? Что это про старые конфетки? %-)
@Анонимный комментирует.
«В нашем полку прибыло
В общем, давно уже прибыло. Баян старый, сейчас вот выложил.
создавать для себя набор скриптиков, которые однозначно и безошибочно
Ой, Анонимус, ну муторно это. Если надо каждый день шифроваться, тогда да.
По теме, если речь идёт про SquashFS, так автор давно в теме. Но отказался от этого, ибо разработчики SquashFS, эти бестолковые животные, по 10 раз меняют формат и собственно утилиты. Ковбои красноглазые.
Или считайте это подсказкой материала для будущих статей
Ммм. про SquashFS тут уже писалось не раз. На самом деле, оно удобно для LiveCD, и непригодно для архивирования (формат меняется). Ну и хотелось бы добавление возможности записи.
Да, на правах обсуждения. Есть потребность делать сжатые блочные устройства (ну, типа файл, а там сжатая файловая система). Чтобы было чтение и, главное, запись на лету. Шифрование опционально. Лучше через loop, но FUSE тоже сойдёт. Интим и BTRFS не предлагать 🙂
Тоже использую трукрипт, в детали даже не вдаюсь. Файлик храню на флешке =).
ps: omg, блоггеровская каптча бесполезна: комментаторам она мешает, спамерам нет =), Блоггер вообще и так спам сеет хорошо.
Похоже, тут опечатка:
при монтировании от размонтировании
Кстати, прочитайте
http://www.pustyshek.net/literature/articles/469-vzlom-sistem-shifrovaniya-zhestkih-diskov-pod-algoritmom-aes-s-ispolzovaniem-256-bitnyh-klyuchey.html
и не очень надейтесь на надежность защиты.
@aldous комментирует.
блоггеровская каптча бесполезна: комментаторам она мешает, спамерам нет
Неправда. Если я выключаю капчу, сюда лезет куча сеошников с большими членами 🙂 Кроме того, троллей тут и так полно, капча сдерживает их активность.
Блоггер вообще и так спам сеет хорошо.
Часто длинные комментарии попадают в спам, и их приходится вылавливать. Так что не совсем.
@Ostrich’s Poison комментирует.
Похоже, тут опечатка:
Точно. Исправил. Спасибо.
@Анонимный комментирует.
и не очень надейтесь на надежность защиты.
Анонимус, оно подразумевает доступ к машине. Если вы сидите в Гуантанамо с конфискованным ноутбуком и файлами lolli_pr0n.truecrypt, то поздно пить Боржоми 🙂
Так шифрование и должно спасать в случае наличия физического доступа к машине, иначе на фига оно вообще. В оригинале, кстати, и ролик- поливают память из баллончика для охлаждения, вырубают, суют в свой бук, грузят прогу для дампа памяти, затем для поиска ключей- и пожалте бриться. Менее чувствительна к такой атаке память с ЕСС, там очистка вроде как обязательна, чтобы заполнить корректными данными биты коррекции
Gentoo: настройка и подключение через /dev/loop файловой системы с компрессией на примере Reiser4
Есть у меня несколько VPS’ок с Gentoo, бегущих под VMWare, для которых я, пожадничав, выделил всего по 7G дискового пространства. Как-то раз, после выхода очередной версии gcc, на одной из них закончилось место. Покопавшись, я обнаружил, что главными потребителями были директории /usr/src и /usr/portage. Тут же родилась мысль переместить их на файловую систему с компрессией (ага, на NTFS) и выбор пал на Reiser4, так как эти данные идеально подходят для неё — очень много файлов и они все маленькие.
Про эту файловую систему в сети имеется множество противоречивой информации (2013), но, пожалуй, стоит почитать статью (2010) ведущего разработчика.
Цитата из статьи:
за последние четыре года я не помню, чтобы кто-то терял данные на reiser4 разделе при исправно работающем железе. Ко мне обращалось несколько человек с жалобой на работу fsck. В конечном итоге все они получали и свои данные и работающий fsck.
Не надо её бояться…
Хочу особо подчеркнуть, так как их часто путают между собой, Reiser4 это не то же самое, что ReiserFS. Это две разных файловых системы! ReiserFS давно уже живет в основном транке ядра, а вот для Reiser4, хотя и появилась она на свет в далеком 2004 году, придется применять патч, который, надо заметить, регулярно обновляется для новых версий ядра.
Качаем и применяем патч в соответствии с вашей версией ядра (у меня в системе linux-3.10.25-gentoo) с этой страницы
Скажем, это можно сделать вот так:
Вот пример реальной последовательности команд и действий, которые я выполнял на своем сервере, вдруг, кому-то пригодится:
Так как я ставлю совсем новое ядро, то нужно подправить настройки загрузчика, я пользуюсь GRUB:
Рабочая запись для нового ядра выглядит так (просто для примера, у вас может быть всё совсем по-другому):
Не стоит пока что делать её конфигурацией по умолчанию, для начала перезапустим сервер и убедимся, что все хорошо.
Делаем контрольный замер свободного места на дисках:
Запасаемся попкорном с валидолом и…
Не забываем ручками выбрать новую конфигурацию ядра для загрузки:
Надеюсь, ваш сервер всё ещё с вами…
Первое и второе мы уже съели, переходим к десерту — созданию loop устройства и монтированием на него образа диска с Reiser4:
Наконец, монтируем наш новый «диск»:
Перемещаем требуемые директории на новое место жительства (тут можно выпить чашечку кофе и поделать другие дела)
Всё, можно сделать контрольный и подсчитывать профит:
Итого: наши исходники занимали 3.9G, после упаковки это значение уменьшилось до 1.8G, или 46% (сжались больше, чем в два раза!) от исходного размера. Мелочь, конечно, но приятно.
Цитата из статьи, ссылка на которую дана в начале поста:
The Reiser4 performance results were mixed but overall its performance was decent compared to EXT4/XFS/Btrfs given the limited manpower devoted to this out-of-tree file-system and its unfortunate history. Beyond porting the file-system to newer versions of the Linux kernel and fixing bugs, there’s been no major development progress on Reiser4 in months. At this time, however, it appears there are still no formal plans for merging Reiser4 into the mainline Linux kernel anytime soon.
Мини-HOWTO: Зацикленная корневая файловая система
Andrew Bishop
Перевод: Станислав Рогин, SWSoft Pte Ltd.
Версия 1.1, 24 сентября 1999
Этот HOWTO объясняет, как использовать зацикленное (loopback) устройство Linux, чтобы создать файловую систему Linux, которая может запускаться из DOS-раздела без изменения системы разделов. Другое применение этой техники также обсуждается в этом документе.
1. Введение
1.1. Copyright
The Loopback Root Filesystem HOWTO Copyright (C) 1998,99 Andrew M. Bishop (amb@gedanken.demon.co.uk).
This documentation is free documentation; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
The GNU General Public License is available from http://www.fsf.org/ or, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA
1.2. Авторские права
Авторские права на русский перевод этого текста принадлежат © 2000 SWSoft Pte Ltd. Все права зарезервированы.
Этот документ является частью проекта Linux HOWTO.
Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.
Все переводы и производные работы, выполненные по документам Linux HOWTO должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO, с которым можно связаться по адресу приведенному ниже.
1.3. История изменений документа
Первоначальная версия (Июнь 1998)
Добавлена информация о Copyright (Сентябрь 1999)
2. Общие принципы зацикленных устройств и электронных дисков (Ramdisks)
Сначала я опишу некоторые общие принципы, используемые при настройке зацикленной файловой системы в качестве корневого устройства.
2.1. Зацикленные устройства
2.2. Электронные диски
В Linux также может использоваться другой тип виртуального устройства, подключаемый как файловая система, под названием электронный диск.
В этом случае, устройство ссылается не на какое-то физическое устройство, а на часть оперативной памяти, выделенной для этой цели. Эта память никогда не сбрасывается в swap на диск, но остается в дисковом кэше.
Когда электронный диск используется при загрузке (что часто применяется на инсталляционных дисках Linux или дисках аварийного восстановления), тогда образ диска (полное содержимое диска в виде отдельного файла) может содержаться на загрузочном флоппи-диске в закомпрессированной форме. Эта ситуация автоматически распознается ядром, когда оно загружается, и этот образ разжимается в электронный диск перед его подключением.
2.3. Загрузочный электронный диск
Такая необычная процедура необходима потому, что при обычной загрузке система начинает и продолжает загрузку с корневой файловой системы. С загрузочным электронным диском корневая файловая система может быть изменена до начала основной последовательности загрузки Linux.
2.4. Корневая файловая система
Когда система загрузилась, нельзя отключить корневую файловую систему или изменить ее из-за того, что все программы используют ее тем или иным образом. Вот почему так полезен загрузочный электронный диск, поскольку его можно использовать, чтобы конечная корневая файловая система могла быть отлична от той, которая была в момент начала загрузки.
2.5. Последовательность загрузки Linux
Чтобы понять, как загрузочный электронный диск работает в процессе загрузки системы, изучим порядок событий при загрузке системы.
Производится инициализация ядра, включая обработку опций командной строки и подключение электронного диска в виде корневой файловой системы.
Корневое устройство переключается в соответствии с параметром ядра.
Это упрощенное описание того, что происходит на самом деле, но этого достаточно, чтобы описать, как запускается ядро и как используется электронный диск.
3. Как создать зацикленное корневое устройство
Теперь, когда все основные принципы объяснены, можно перейти к созданию зацикленного корневого устройства.
3.1. Требования
Создание зацикленного корневого устройства потребует от вас нескольких вещей.
Систему с работающим Linux-ом.
Способ скопировать большие файлы на DOS-раздел.
Наиболее важно иметь доступ к работающему Linux-у. Это необходимо по причине того, что зацикленное устройство может быть создано только в Linux-е. Это означает, что нельзя создать работающую машину с зацикленной корневой файловой системой из ничего. От этой Linux-системы потребуется возможность собрать на ней ядро.
После создания зацикленное устройство будет представлять из себя большой файл. Я использовал примерно 80 Мб файлов, но этого достаточно только, чтобы сделать Х-терминал, а возможно, если вы захотите чего-то большего, вам потребуется больше места. Этот файл должен быть скопирован на DOS-раздел, то есть придется использовать или сеть, или кучу флоппи-дисков.
Вам также понадобится следующее программное обеспечение:
LOADLIN версии 1.6 или новее
ядро, поддерживающее все необходимые условия.
Это все должно входить в последние инсталляции дистрибутивов Linux.
3.2. Создаем ядро Linux
Я создал зацикленное устройство с использованием ядра версии 2.0.31, другие версии тоже должны работать, но они должны поддерживать все опции, перечисленные ниже.
Опции ядра, которые вам надо будет включить:
Поддержка электронных дисков (RAM disk support) ( CONFIG_BLK_DEV_RAM ).
Поддержка загрузочного электронного диска (Initial RAM disk (initrd) support) ( CONFIG_BLK_DEV_INITRD ).
Поддержка зацикленных устройств (Loop device support) ( CONFIG_BLK_DEV_LOOP ).
Поддержка файловой системы FAT (fat fs support) ( CONFIG_FAT_FS ).
Поддержка файловой системы MSDOS (msdos fs support) ( CONFIG_MSDOS_FS ).
В зависимости от версии вашего ядра, вам, возможно, придется установить патч к ядру. Это очень простой патч, который разрешает использование зацикленной файловой системы в виде корневой.
3.3. Создаем загрузочный электронный диск
Загрузочный электронный диск проще всего создавать, как зацикленное устройство с самого начала. Вы должны делать это в качестве root-а. Список команд, которые вы должны запустить, приведен ниже. Они предполагают запуск из личного каталога root-а ( /root ).
Здесь производится несколько действий, которые можно вкратце описать так:
Создаем точку подключения загрузочного электронного диска (пустой каталог).
Создаем пустой файл необходимого размера. Я здесь использовал 1024 Кб, вам может понадобиться меньше или больше, в зависимости от содержимого (размер задается в последней опции).
Создаем файловую систему ext2 в пустом файле.
Подключаем этот файл к точке подключения, с использованием зацикленного устройства.
Переходим ко вновь подключенному зацикленному устройству.
Создадим там все необходимые файлы (см. ниже).
Выходим из подключенного зацикленного устройства.
Создаем компрессированную версию для дальнейшего использования.
Содержимое загрузочного электронного диска
На загрузочном диске нужно иметь все файлы, необходимые для запуска любых команд:
/linuxrc скрипт, который подключает файловую систему msdos (см. ниже).
/lib/* система динамических связей (dynamic linker) и библиотеки, необходимые программам.
/etc/* Кэш, используемый системой динамических связей (не очень нужен, но после этого перестают выдаваться жалобные сообщения).
/mnt Пустой каталог для подключения msdos-диска.
Содержимое загрузочного электронного диска, которое я использовал, приведено ниже. Оно заняло примерно 800 Кб, если принимать в расчет излишки файловой системы.
Файл /linuxrc на загрузочном электронном диске нужен для того, чтобы произвести все приготовления, необходимые для подключения зацикленного устройства как корневого.
3.4. Создаем корневое устройство
Файл /etc/fstab должен ссылаться на корневой раздел и swap-пространство через два зацикленных устройства, настроенных загрузочным электронным диском.
Таким образом, вы будете уверены в том, что ядро не ошибется относительно реального местоположения корневой файловой системы. Также swap-пространство будет организовано обычным образом так, как будто используется обычный swap-раздел. Вы должны удалить все строки, ссылающиеся на корневое файловое устройство или swap-раздел.
Если хотите иметь возможность читать DOS-раздел под Linux-ом? вам придется внести еще несколько небольших изменений.
Нет необходимости в том, чтобы иметь ядро Linux на этом корневом зацикленном устройстве, так как оно загружено ранее. Если вы используете модули, можете включить их в это устройство обычным образом.
3.5. Создаем Swap-устройство
Размер swap-устройства, которое вы будете использовать, зависит от ваших планов по использованию новой системы, но я бы рекомендовал его от 8 Мб до размера вашей оперативной памяти.
3.6. Создаем каталог MSDOS
Файлы, которые будут нами использоваться, необходимо переписать на DOS-раздел.
В DOS-каталоге C:\LINUX должны находиться следующие файлы:
LINUXDSK.IMG Образ диска, который станет корневой файловой системой.
3.7. Создаем загрузочный флоппи-диск
Загрузочный флоппи-диск, который мы будем использовать, является простым загрузочным диском DOS.
AUTOEXEC.BAT Автоматически запускаемый командный файл DOS.
INITRDGZ.IMG Компрессированный образ загрузочного электронного диска.
В файле AUTOEXEC.BAT должна быть только одна строка.
Здесь указано, какой образ ядра использовать, какой образ загрузочного электронного диска использовать, а также корневая файловая система, которая должна быть подключена «только для чтения».
4. Загрузка системы
Для загрузки нового корневого устройства необходимо, чтобы флоппи-диск, описанный выше, был вставлен в компьютер при его загрузке.
Вы увидите следующую последовательность событий.
Загрузка в память ядра Linux
Загрузка в память загрузочного электронного диска
Запуск файла /linuxrc с загрузочного электронного диска
Подключение DOS-раздела и настройка корневого и swap-устройств
Последовательность загрузки продолжается с зацикленного устройства
Когда все это пройдет, вы можете убрать флоппи-диск и использовать Linux.
4.1. Возможные проблемы и их решение
Существует ряд причин, по которым что-то в этом процессе идет не так. Я попытаюсь объяснить, в чем они заключаются, и что необходимо проверить.
Когда ядро декомпрессирует себя, оно может выдать сообщение о crc-ошибках, если ядро повреждено. Затем начнется инициализационная последовательность, которая содержит очень много диагностических сообщения. Загрузка в память загрузочного электронного диска также видна на этой фазе.
Когда последовательность загрузки закончится, может возникнуть проблема, состоящая в том, что некоторые программы не очень хорошо понимают, подключен ли DOS-раздел. Поэтому я советую использовать «поддельную» команды mount, описанную выше. Она значительно упростит жизнь, если вы хотите использовать файлы на DOS-устройстве.
4.2. Ссылки на другие документы
При создании моей первой зацикленной корневой файловой системы я использовал следующие источники информации:
Исходные тексты ядра Linux, в особенности init/main.c
5. Другие возможности зацикленных корневых устройств
Мы подробно описали возможность загрузки корневой файловой системы из DOS-раздела, но существует много других вещей, которые вы можете сделать.
5.1. Установка на DOS-жесткий-диск
Если возможно загрузить Linux из файла на жестком диске с раздела DOS, используя загружаемый флоппи, то, очевидно, возможно загрузить его и с самого жесткого диска.
5.2. Установка с загрузкой при помощи LILO
5.3. Установка на VFAT / NTFS
Я использовал этот метод и с NTFS, и у меня не возникло никаких проблем. Драйвер файловой системы NTFS не входит в стандартную поставку ядра версий 2.0.x, но доступен в виде патча по адресу http://www.informatik.hu-berlin.de/
Единственное изменение, касающееся VFAT или NTFS, должно быть внесено в загрузочный электронный диск, а конкретнее, в файл /linuxrc : при подключении файловой системы необходимо указать тип файловой системы vfat или ntfs, вместо msdos.
Я не знаю причин, по которым это не должно работать в разделе VFAT.
5.4. Установка Linux без изменения разделов
Процесс установки Linux на компьютер со стандартного дистрибутива предполагает загрузку с флоппи-диска и изменение структуры разделов диска. Вместо этого можно создать загружаемый флоппи-диск, который создаст пустое зацикленное устройство и swap-файл. После этого установка может быть продолжена обычным образом, просто система будет установлена в зацикленное устройство вместо раздела.
5.5. Загрузка с незагружаемого (Non-bootable) устройства
Вышеописанный метод можно также использовать для загрузки Linux-а с устройства, которое обычно не является загружаемым.
Диски на параллельном порте
Очевидно, что и многие другие устройства могут быть использованы также. Корневые файловые системы NFS включены в ядро в виде опции, но этот способ может быть использован в качестве альтернативы.