Переместить раздел из LVM до физического привода

В документации ядра объясняется, как упаковать образ в само ядро. Из kernel.org :

Что такое rootfs?

Rootfs - это особый экземпляр ramfs (или tmpfs , ] если это включено), который всегда присутствует в системах 2.6. Вы не можете размонтировать rootfs примерно по причине, по которой вы не можете убить процесс инициализации; вместо того, чтобы иметь специальный код для проверки и обработки пустого списка, ядру меньше и проще просто следить за тем, чтобы определенные списки не могли стать пустыми.

Большинство систем просто монтируют другую файловую систему поверх rootfs и игнорируют ее. Пустой экземпляр ramfs занимает крошечное место.

Если CONFIG_TMPFS включен, rootfs по умолчанию будет использовать tmpfs вместо ramfs . Чтобы заставить ramfs , добавить "rootfstype = ramfs" в командную строку ядра.

Что такое initramfs?

Все ядра Linux 2.6 содержат архив в формате gzip «cpio» , который извлекается в rootfs при загрузке ядра вверх. После распаковки ядро ​​проверяет, содержит ли rootfs файл "init" , , и если да, то выполняет его как PID 1. ] Если обнаружен, этот процесс init отвечает за доведение системы до конца, включая обнаружение и установку настоящего корневого устройства (если есть). Если rootfs не содержит программу init после извлечения в него встроенного архива cpio , ядро ​​перейдет к старому коду, чтобы найти и смонтируйте корневой раздел, затем выполните из него какой-нибудь вариант / sbin / init .

Все это несколько отличается от старого initrd:

  • Старый initrd всегда был отдельным файлом, в то время как архив initramfs связан с образом ядра Linux. (Каталог linux - * / usr предназначен для создания этого архива во время сборки.)

  • Старый файл initrd представлял собой сжатый с помощью gzip образ файловой системы (в некотором формате файла, таком как ext2, для которого требовался встроенный драйвер. ядро), в то время как новый архив initramfs представляет собой сжатый gzip-архив cpio (как tar, только более простой, см. cpio (1) и Documentation / early-userspace / buffer-format.txt). Код извлечения cpio ядра не только чрезвычайно мал, он также __init текст и данные, которые могут быть отброшены во время процесса загрузки.

  • Программа, запущенная старым initrd (которая называлась / initrd, а не / init), выполнила некоторую настройку, а затем вернулась в ядро, в то время как программа init из initramfs не должна возвращаться в ядро. (Если / init необходимо передать управление, он может перемонтировать / с новым корневым устройством и выполнить другую программу инициализации. См. Служебную программу switch_root ниже.)

  • При переключении другого корневого устройства initrd будет pivot_root, а затем размонтировать ramdisk. Но initramfs - это rootfs: вы не можете ни pivot_root rootfs, ни размонтировать его. Вместо этого удалите все из rootfs, чтобы освободить место (найдите -xdev / -exec rm '{}' ';'), перемонтируйте rootfs с новым корнем (cd / newmount; mount --move. /; Chroot .), прикрепите stdin / stdout / stderr к новому / dev / console и выполните новый init.

Поскольку это чрезвычайно привередливый процесс (и включает в себя удаление команд перед их запуском), в пакете klibc появилась вспомогательная программа (utils / run_init.c), которая сделает все это за вас. Большинство других пакетов (например, busybox) назвали эту команду «каталог-переключателя».

Заполнение файлов initramfs:

Процесс сборки ядра 2.6 всегда создает архив initramfs в формате gzip cpio и связывает его с полученным двоичным файлом ядра. По умолчанию этот архив пуст (занимает 134 байта на x86).

Параметр конфигурации CONFIG_INITRAMFS_SOURCE General Setup в menuconfig, и проживание в usr / Kconfig ) можно использовать для указания исходный код для архива initramfs , который автоматически включается в полученный двоичный файл. Этот параметр может указывать на * существующий gzipped cpio * архив, каталог , содержащий файлы для архивации, или текст спецификация файла, например

  dir / dev 755 0 0 
nod / dev / console 644 0 0 c 5 1 
nod / dev / loop0 644 0 0 b 7 0 
dir / bin 755 1000 1000 
slink / bin / sh busybox 777 0 0 
file / bin / busybox initramfs / busybox 755 0 0 {{1} } dir / proc 755 0 0 
dir / sys 755 0 0 
dir / mnt 755 0 0 
file / init initramfs / init.sh 755 0 0 
 

Запустите « usr / gen_init_cpio » (после сборки ядра) , чтобы получить сообщение об использовании, документирующее указанный выше формат файла.

Одним из преимуществ файла конфигурации является то, что доступ root не требуется для установки разрешений или создания узлов устройств в новом архиве.

(Обратите внимание на , что эти два примера записей «файл» ожидают найти файлы с именами « init.sh » и « busybox » в каталоге с именем « initramfs "в каталоге linux -2.6. *. Подробнее см. Documentation / early-userspace / README .)

Ядро не зависит от внешних cpio инструментов. Если вы укажете каталог вместо файла конфигурации, инфраструктура сборки ядра создаст файл конфигурации из этого каталога ( usr / Makefile вызывает scripts / gen_initramfs_list.sh ), и приступает к упаковке этого каталога с помощью файла конфигурации (путем передачи его в usr / gen_init_cpio , который создается из usr / gen_init_cpio.c ). Код создания cpio ядра во время сборки полностью самодостаточен, и экстрактор времени загрузки ядра также (очевидно) самодостаточный.

1
31.12.2018, 07:04
2 ответа

Похоже, fdiskи fsckиспользовали кешированные данные даже после выдачи partprobe. Это заставило fdisk использовать неправильную таблицу разделов и fsck неправильный суперблок.

Я попытался перезагрузить машину, и fdisk, и fsck сообщили об ожидаемых результатах, но, кроме того, такие же результаты для физического диска и LV.

Я ожидал, что FS может сообщать об ошибках (все 4 ТБ, но 2 МБ были восстановлены с исходного диска на LV ), но я смонтировал раздел на физическом диске, и файлы оказались в порядке.

1
27.01.2020, 23:31

Возможно, будет проще вручную создать новую таблицу разделов на целевом жестком диске/sdd, заново создать файловую систему (с )и скопировать данные с диска LVM -.

Я лично использую для этого rsync -avxHAX (source) (target).

1
27.01.2020, 23:31

Теги

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