質問: 誤って、VMWareで実行されているCentOS仮想マシンで「root」アカウントを無効にしてしまいました。その後、「root」アカウントを回復するために考えられるすべての方法を試し、最終的にシングルユーザーモードでVMを再起動することにしました。残念ながら、VMはシングルユーザーモードでの起動に失敗し、エラーメッセージは、起動プロセスが rootを予期していることを示していました。 アカウントとプロセスは無期限にハングしました。以下は、シナリオを説明するスクリーンショットです。
この問題を修正するには、なんとかして / etc / passwdを編集する必要があります。 ファイルを作成し、rootアカウントを有効にします。そのためには、仮想マシンのディスクイメージが必要です。私の場合、VMはVMWareで実行されていたため、 vmdkが必要です。 ファイル。
解決策:
このチュートリアルでは、libguestfsツールの使用方法を紹介します。 仮想マシン(VM)ディスクイメージファイルにアクセスして編集します。 libguestfsは、ゲスト内のファイルの表示と編集、VMの変更、ディスク使用量の監視、VMのクローン作成、ディスクのフォーマット、ディスクのサイズ変更などを行うための一連のツールを備えたCライブラリです。このツールは、CD、USBディスク、およびSSH経由でリモートからVMディスクイメージを読み取ることができます。
libguestfsを使用する前に ツールを使用して、仮想マシンのディスクイメージファイルを準備します。 libguestfsは、VMwareやHyper-Vなどの独自のシステムもサポートしています。
libguestfsツールをインストールします:
CentOS / Fedora / RHELの場合:
sudo yum install libguestfs-tools
Debian / Ubuntuの場合:
sudo apt-get install libguestfs-tools
前に述べたように、libguestfsツールには、guestfish、guestmount、guestunmount、virt-alignment-scan、virt-builder、virt-cat、virt-copy、virt-edit、virt-diff、virt-customize、virtなどの多くのコマンドが付属しています。 -filesystems、virt-format、virt-get-kernel、virt-inspector、virt-list-filesystems、virt-list-partitions、virt-log、virt-ls、virt-make-fs、virt-p2v、virt-p2v -make-disk、virt-rescue、virt-tarなど。ただし、guestfishコマンドを使用します。これにより、仮想マシンのイメージにアクセスして変更できます。
ゲストフィッシュ:
ゲストフィッシュ コマンドは、インタラクティブシェルとコマンドラインツールの両方として使用できます。このコマンドを使用すると、読み取り専用(–roオプション)モードと読み取り/書き込み(–rwオプション)モードの両方でディスクイメージを開くことができます。
Caution: Make sure to shutdown the VM before using guesfish to access/modify the image.
ゲストフィッシュをインタラクティブシェルとして使用する:
# guestfish Welcome to guestfish, the libguestfs filesystem interactive shell for editing virtual machine filesystems. Type: 'help' for help on commands 'man' to read the manual 'quit' to quit the shell
次に、vmdkイメージファイルにアクセスします(たとえば、 test-flat.vmdk 。
><fs> add-ro test-flat.vmdk
注: コマンドadd-roに注意してください つまり、読み取り専用モードでイメージを追加またはアクセスします。イメージに変更を加える場合は、読み取り/書き込み権限でイメージを開く必要があります(これについては後で説明します)。
常に実行を実行します 以下に示すように、ディスクイメージ内のファイルシステムを一覧表示する前にコマンドを実行します。
><fs> run â 25% â¦ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ§ --:-â 50% â¦ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ§ 00:3â 75% â¦ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ§ 00:1 100% â¦ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ§ 00:00
上記のコマンドは、画像の読み取りに時間がかかります。完了したら、以下に示すように、ディスク内の使用可能なファイルシステムを一覧表示できます。
><fs> list-filesystems /dev/vda1: ext4 /dev/VolGroup/lv_home: ext4 /dev/VolGroup/lv_root: ext4 /dev/VolGroup/lv_swap: swap
次に、 / dev / VolGroup / lv_rootをマウントする必要があります / etc / passwdにアクセスするため 。
><fs> mount /dev/VolGroup/lv_root /
画像を読み取り専用モードで開いたため、 / etc / passwdしか表示できません。 。
> cat /etc/passwd ::::::::::::::::::::::
完全なスナップショットは次のとおりです。
# guestfish Welcome to guestfish, the libguestfs filesystem interactive shell for editing virtual machine filesystems. Type: 'help' for help on commands 'man' to read the manual 'quit' to quit the shell
><fs> add-ro test-flat.vmdk ><fs> run â 50% â¦ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ§ --:-â 75% â¦ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ§ 00:0 100% â¦ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ§ 00:00 ><fs> mount /dev/VolGroup/lv_root / ><fs> cat /etc/passwd :::::::::::::::::::::::::::::: ><fs> exit
ゲストフィッシュをコマンドとして使用してファイルを編集する:
# guestfish --rw --add test-flat.vmdk -i edit /etc/passwd
オプションを探してください
- –rw –VMディスクイメージを読み取り/書き込みモードで開く
- –追加 –「test-flat.vmdk」イメージを追加します
- -i –仮想マシンイメージからディスクを自動的にマウントします
- 編集 –ファイルを編集するコマンド
上記のコマンドを使用すると、画像から直接ファイルを編集して保存することができます。
その他の例:
/etc/resolv.confを更新するとします。 ゲストの場合、その方法は次のとおりです。
# guestfish \
add disk.vmdk : run : mount /dev/VolGroup/lv_root / : \
write /etc/resolv.conf "nameserver 8.8.8.8"
guestfishを使用してsshを使用してリモートディスクイメージにアクセスする:
# guestfish -a ssh://somedomain.com/path/to/disk.vmdk
guestfishは不思議なことをするのに役立つので、ヘルプページを確認することをお勧めします。
# guestfish -N help
それでおしまい。詳細については、libguestfs.orgを確認してください。