web-dev-qa-db-ja.com

デスクトップLiveCDからのLVMルートでの起動できないインストールの修正

ルートボリュームをLVM LVにして、10.10 Desktop LiveCDからインストールしました。

どうやらこれはサポートされていません。 GUIインストーラーアプリを起動する前に、次の手順を実行して管理しました。

  • lvm2パッケージを実行中のシステムにインストールする
  • システムのハードドライブにLVMタイプのパーティションを作成する
  • lVMツールを使用して、物理ボリューム、ボリュームグループ、およびルートLVを作成します。 /var;の2番目のLVも作成しました。これは関係ないと思います。
  • 2つのLVのそれぞれにファイルシステム(ext4)を作成します。

これらの手順を実行した後、GUIインストーラーは2つのLVをインストールターゲットとして提供しました。 LVMパーティションとは別のプライマリパーティションに/bootを置くことも喜んで受け入れました。

インストールは順調に進んでいるようで、ルートボリュームとvarボリュームの両方に許容可能なディレクトリ構造が含まれていることを確認しました。

ただし、起動は失敗します。何が起こったのかを正しく理解できたら、initrdファイルシステムで実行されているbusyboxにドロップされました。

私はまだ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(livecdでブートされたシステムにlvm2でインストールされ、インストールされたシステムには存在しない)を正しく読んでいる場合、lvm実行可能ファイルは/sbin;そうではありません。

この状況を改善する最良の方法は何ですか? LVMをサポートしていると思われる代替インストールCDを使用する方が簡単だと思いますが、ダウンロードしてから再インストールするのを待ちたくありません。

9
intuited

あなたは頭の上の問題を直撃しました:initramfsはLVMをサポートしていません。修正方法は次のとおりです。

  1. LiveCDを再度ブートします
  2. Live環境にlvm2を再度インストールします
  3. ボリュームグループを起動します(-a yが機能しない場合は、-a yesを試してください)

    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
    

この時点で、正常に戻るはずです(lvm2のインストール時にinitramfsが再生成されるため)。そうでない場合は、chroot内でupdate-initramfs -uを実行して遊ぶことができます。

9
Kees Cook

システムをハードディスクにインストールした後、起動する前にそのシステムにlvm2をインストールする必要があります。 livecdにlvm2をインストールした場合、パッケージは/ var/cache/apt/archivesにあります。そのディレクトリに移動し、ハードディスクをマウントし、dpkg --root =/mnt * .debを使用してパッケージをハードディスクにインストールします。あなたの場合、ルートfsを/ mntにマウントし、var fsを/ mnt/varにマウントする必要があります。

また、別の/ bootパーティションは必要なく、別の/ varパーティションは疑わしいです。

1
psusi

最終的には this walkthrough の最後のセクションの助けを借りて、Kees Cookがうまくレイアウトしていることを主にやった。しかしながら:

  • /devをバインドマウントしませんでした。これにより、後でいくつかのエラーメッセージが発生したようです。下記参照。
  • /varに加えて、/bootボリュームを新しいルートにマウントしました。
  • デブを新しいルートの/tmpにコピーしませんでした。代わりに、chrootingの後に# apt-get install aptitude; aptitude install lvm2を実行しました。

    • これらのアクションを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.
1
intuited