Исправление не загружаемой установки в корневом каталоге LVM с рабочего стола LiveCD

9

Я только что сделал установку с 10.10 Desktop LiveCD, сделав корневой том LVM LV.

Видимо это не поддерживается; Я справился с этим, выполнив следующие шаги перед запуском приложения с графическим интерфейсом:

  • установка lvm2пакета в работающей системе
  • создание раздела типа LVM на системном жестком диске
  • создание физического тома, группы томов и корневого LV с помощью инструментов LVM. Я также создал второй LV для /var; это я не считаю уместным.
  • создание файловой системы (ext4) на каждом из двух LV.

После этих шагов установщик с графическим интерфейсом предложил два LV в качестве целей установки; Я с радостью согласился, также ставя /bootосновной раздел отдельно от раздела LVM.

Казалось, что установка прошла гладко, и я убедился, что тома root и var содержат приемлемые структуры каталогов.

Однако загрузка не удалась; если я правильно понял, что произошло, меня поместили в занятый ящик, работающий в файловой системе initrd.

Хотя я еще не изучил всю документацию по grub2, похоже, что запись, пытающаяся загрузить мою новую систему, верна:

menuentry 'Ubuntu, with Linux 2.6.35-22-generic' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos3)'
    search --no-floppy --fs-uuid --set $UUID_OF_BOOT_FILESYSTEM
    linux   /vmlinuz-2.6.35-22-generic root=/dev/mapper/$LVM_VOLUME_GROUP-root ro   quiet splash
    initrd  /initrd.img-2.6.35-22-generic
}

Обратите внимание, что $ VARS заменяются в фактических grub.cfgзначениях.

Я перезагрузился обратно в livecd и распаковал образ initrd во временный каталог. Похоже, что образу initrd не хватает функциональности LVM. Например, если я правильно читаю /usr/share/initramfs-tools/hooks/lvm2(установлен в системе с lvm2livecd-загрузкой, а не в установленной), lvmисполняемый файл должен находиться в /sbin; Это не относится к делу.

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

созерцаемое
источник

Ответы:

9

Вы столкнулись с проблемой прямо в голове: initramfs не поддерживает LVM. Вот как это исправить:

  1. Загрузите LiveCD снова
  2. Установите lvm2снова в среде Live
  3. Вызовите группу томов (если -ay не работает, попробуйте -a да)

    vgchange -a y
    
  4. Получите root LV, / boot и / dev, смонтированные под отдельным деревом

    mkdir /newroot
    mount /dev/yourVG/rootLV /newroot
    mount /dev/yourbootpartition /newroot/boot
    mount -o bind /dev /newroot/dev
    
  5. Скопируйте необходимые пакеты в дерево / newroot

    cp /var/cache/apt/archives/*deb /newroot/tmp/
    
  6. Загрузите новое дерево и установите пакеты

    chroot /newroot
    cd /tmp
    dpkg -i *.deb
    

На этом этапе все должно вернуться к нормальной жизни (поскольку initramfs будет восстановлен при установке lvm2). Если нет, вы можете поиграть с бегом update-initramfs -uвнутри chroot.

Кис Кук
источник
В чем причина привязки / dev?
интуитивно
Я добавил / dev на случай, если grub перезапустится, и хотел выяснить, где находятся загрузочные диски. Я использовал dpkg в том случае, если внутри chroot не работает сеть или что-то другое странное. Если работа в сети работает, я рекомендую «apt-get» вместо «aptitude», так как в наши дни это лучше, чем разрешение.
Кис Кук
Спасибо за совет apt-get, трудно отслеживать, что к чему. У вас есть ссылка на дополнительную информацию об этом?
интуитивно
1

После установки системы на жесткий диск, вам необходимо установить lvm2 в эту систему, прежде чем она сможет загрузиться. Если вы установили lvm2 на livecd, пакеты будут по-прежнему находиться в / var / cache / apt / archives. Перейдите в этот каталог, смонтируйте жесткий диск и установите пакеты на жесткий диск, используя dpkg --root = / mnt * .deb. В вашем случае вам нужно смонтировать root fs в / mnt, а также var fs в / mnt / var.

Также вам не нужен отдельный раздел / boot, а отдельный раздел / var сомнителен.

psusi
источник
Хорошо .. это проще, чем chroot-ing. Я предполагаю, что это не будет регистрироваться в aptitudedb пакетов, которые были явно установлены, хотя, поэтому я, вероятно, должен просто установить lvm2и его зависимости таким образом. Есть ли недостатки использования отдельного /var? Помимо вопроса о необходимости выделить дополнительное свободное пространство? Я хотел бы иметь возможность снимать его, поэтому я не хочу смешивать его с другими большими переменными файлами; Я планирую использовать символическую ссылку или подключить мой домашний каталог к ​​каталогу на отдельном /dataтоме, который я создам после запуска системы для хранения музыки и тому подобного.
интуитивно
Кроме того: мне также нужно смонтировать загрузочный фс в /mnt/boot, нет? Я понимаю, что lvm2при установке создается новый initrd.
интуитивно
@intuited no, он будет записан как установленный вручную, как всегда. Да, вам также необходимо установить / boot, если у вас есть отдельный из них. Наличие отдельного / var не помогает делать снимки.
psusi
Отдельный /varраздел не поможет со снимками, нет, но он, например, поможет предотвратить неожиданное заполнение корневых файлов. Вы говорите, что это создаст проблемы с созданием снимков? Ой, подождите, это вы в другой ветке комментариев к вопросу. Неважно ..
интуитивно
1

Я закончил тем, что делал в основном то, что хорошо выложил Киз Кук, с некоторой помощью в последнем разделе этого прохождения . Однако:

  • Я не привязывался /dev. Похоже, это вызвало некоторые сообщения об ошибках позже; см. ниже.
  • Я смонтировал свой /varтом на новый корень в дополнение к /boot.
  • Я не скопировал дабы в /tmpновый корень. Вместо этого я побежал # apt-get install aptitude; aptitude install lvm2за chrootинг.

    • Я сделал это для того, чтобы зарегистрировать эти действия в базе данных apt: например, aptitudeи, возможно, также apt-get, будет отслеживать, какие пакеты были установлены явно, а какие были установлены автоматически как зависимости.
    • Поскольку я на самом деле получаю свои пакеты через локальный apt-прокси (работает apt-cacher-ng), мне даже не пришлось ждать, пока они загрузятся снова. Я должен был сделать файл в /etc/apt/apt.conf.d/02proxyсодержании Acquire::http::Proxy "http://local-apt-proxy-server:3142";перед запуском apt-get. Я проделал то же самое, прежде чем начать установку пакетов во время работы с LiveCD перед установкой.
    • Я получил сообщение об ошибке или предупреждение пару раз, заявляя

      Can not write log, openpty() failed (/dev/pts not mounted?)
      

** mount -o bind / dev / pts / mnt / YouNameIt / dev / pts

    This did not prevent the appropriate lines from being added to `/var/log/dpkg.log`.

    I suspect that this issue could have been averted by bind-mounting `/dev`, but I don't really understand what it means, i.e. I don't know what log it's referring to, or why it would need to access a pty in order to write to a log.
созерцаемое
источник
Я принимаю мой собственный ответ, потому что он работал хорошо для меня; см. ответ Kees для аналогичного решения, которое может быть более надежным в некоторых ситуациях.
интуитивно