Виправлення незавантаженої установки на корені LVM від Desktop LiveCD


9

Щойно я зробив установку з 10.10 Desktop LiveCD, зробивши кореневий об'єм LVM LV.

Мабуть, це не підтримується; Я керував цим, виконавши наступні дії перед запуском програми інсталятора GUI:

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

Після виконання цих кроків інсталятор GUI запропонував два LV як цілі встановлення; Я із задоволенням прийняв, також розмістивши /bootпервинний розділ, окремо від LVM-розділу.

Здається, встановлення проходить безперебійно, і я переконався, що і кореневий, і томовий 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 у каталог temp. Схоже, що в initrd-зображенні не вистачає функціональності LVM. Наприклад, якщо я читаю /usr/share/initramfs-tools/hooks/lvm2(встановлений із lvm2системою, завантаженою livecd, немає на встановленій) правильно, lvmвиконуваний файл повинен бути розміщений у /sbin; це не так.

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

Відповіді:


9

Ви потрапили на проблему прямо по голові: у initramfs немає підтримки LVM. Ось як це виправити:

  1. Знову завантажте LiveCD
  2. Встановіть lvm2знову в прямому середовищі
  3. Створіть групу томів (якщо -ay не працює, спробуйте -a так)

    vgchange -a y
    
  4. Отримайте кореневий 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 в нове дерево і встановити пакети

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

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


У чому причина встановлення прив'язки / dev?
інтуїтивно

Я додав / dev у випадку, якщо grub перезапустився і хотів з’ясувати, де розташовані завантажувальні диски. Я використовував dpkg у тому випадку, якщо мережа не розвивається чи інакше дивна всередині chroot. Якщо робота в мережі працює, я рекомендую "влучно отримати" над "здатністю", оскільки в цей час вона краще вирішує роздільну здатність.
Kees Cook

Дякую за пораду apt-get, важко відстежувати, що до чого. Чи є у вас посилання на додаткову інформацію про це?
інтуїтивно,

1

Після встановлення системи на жорсткий диск вам потрібно встановити lvm2 в цю систему, перш ніж вона може завантажуватися. Якщо ви встановили lvm2 на livecd, пакети все ще будуть знаходитись у / var / cache / apt / archives. Перейдіть до цього каталогу, встановіть жорсткий диск і встановіть пакети на жорсткий диск за допомогою dpkg --root = / mnt * .deb. У вашому випадку вам потрібно встановити корінь fs до / mnt, а також var fs в / mnt / var.

Також вам не потрібен розділ / завантажувальний розділ, і окремий / var-розділ викликає сумніви.


Приємно .. це простіше, ніж chroot-ing. Я думаю, що це не буде зареєстровано у aptitudedb пакетів, які були явно встановлені, тому я, мабуть, повинен просто встановити lvm2та його залежності таким чином. Будь-які недоліки використання окремого /var? За винятком питання про необхідність виділення додаткового «слабкого» простору? Мені б хотілося зробити знімок, тому я не хочу змішувати його з іншими великими змінними файлами; Я планую посилати або прив’язати свій домашній каталог до каталогу в окремому /dataтомі, який я створитиму після запуску та роботи системи, для зберігання музики тощо.
інтуїтоване

Також: мені також потрібно буде встановити fs завантажувача /mnt/boot, ні? Я знаю, що lvm2будує новий initrd на встановлення.
інтуїтоване

@intuited ні, він буде записаний як встановлений вручну, як завжди. Так, вам також потрібна установка / завантаження, якщо у вас є окремий. Окремий / var не допомагає робити знімки.
psusi

Окремий /varрозділ не допоможе зробити знімки, ні, наприклад, це допоможе запобігти несподіваному заповненню кореневих файлів. Ви хочете сказати, що це створить проблеми із зйомкою знімків? О, зачекайте, це ви на іншій темі коментаря. Nevermind ..
інтуїтивно

1

Я в кінцевому підсумку робив здебільшого те, що добре тримає Кіс Кук, маючи деяку допомогу в заключному розділі цього покрокового керівництва . Однак:

  • Я не прив’язував /dev. Схоже, це спричинило пізніші повідомлення про помилки; Дивись нижче.
  • Я монтував свій /varтом на новий корінь на додаток до /boot.
  • Я не скопіював деби в /tmpновий корінь. Натомість я побіг # apt-get install aptitude; aptitude install lvm2після chrootінж.

    • Я зробив це для того, щоб зареєструвати ці дії в базі даних apt: наприклад, aptitudeі, можливо, також apt-getбуде відслідковуватися, які пакети були встановлені явно, а які встановлені автоматично як залежності.
    • Оскільки я фактично отримую свої пакунки через місцевий проксі-проксі (запущений 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 прив’язувати / 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.

Я приймаю власну відповідь, тому що вона добре працювала на мене; див відповідь Кіса на подібне рішення, яке може бути більш надійним у деяких ситуаціях.
інтуїтована
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.