「既存環境を仮想マシンに (から) 移動」の版間の差分
(リンクを修正) |
(他言語へのリンクを追加) |
||
(2人の利用者による、間の4版が非表示) | |||
2行目: | 2行目: | ||
[[Category:仮想化]] |
[[Category:仮想化]] |
||
[[en:Moving an existing install into (or out of) a virtual machine]] |
[[en:Moving an existing install into (or out of) a virtual machine]] |
||
+ | [[pt:Moving an existing install into (or out of) a virtual machine]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|VirtualBox}} |
{{Related|VirtualBox}} |
||
8行目: | 9行目: | ||
{{Related|新しいハードウェアに移行する}} |
{{Related|新しいハードウェアに移行する}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
− | この記事では Arch Linux の現在の環境を仮想環境 (QEMU, VirtualBox, VMware) に、あるいは仮想環境から移動する方法を説明します。[[rsync によるフルシステムバックアップ]]の記事が元になっています。仮想マシン (略して "VM") が使用するハードウェアは異なるので、initramfs イメージを再生成して fstab を修正する必要があります (特に [[SSD]] を使っている場合) |
+ | この記事では Arch Linux の現在の環境を仮想環境 (QEMU, VirtualBox, VMware) に、あるいは仮想環境から移動する方法を説明します。[[rsync によるフルシステムバックアップ]] の記事が元になっています。仮想マシン (略して "VM") が使用するハードウェアは異なるので、initramfs イメージを再生成して fstab を修正する必要があります (特に [[SSD]] を使っている場合) |
== VM から移動 == |
== VM から移動 == |
||
18行目: | 19行目: | ||
ゲストの仮想マシンと使用しているハイパーバイザのホストに共有フォルダを設定してください。詳しくは仮想環境の wiki ページを参照してください。 |
ゲストの仮想マシンと使用しているハイパーバイザのホストに共有フォルダを設定してください。詳しくは仮想環境の wiki ページを参照してください。 |
||
− | ext4 パーティションが存在しない場合は、[[ビギナーズガイド#デバイスの確認]]を参照。 |
+ | ext4 パーティションが存在しない場合は、[[ビギナーズガイド#デバイスの確認]] を参照。 |
Windows を使っている場合は [http://www.ext2fsd.com/ Ext2Fsd] をインストールして ext ボリュームがマウントできるようにしてください。 |
Windows を使っている場合は [http://www.ext2fsd.com/ Ext2Fsd] をインストールして ext ボリュームがマウントできるようにしてください。 |
||
24行目: | 25行目: | ||
=== システムの転送 === |
=== システムの転送 === |
||
− | 仮想マシンから、ターミナルを開いてシステムを[[rsync によるフルシステムバックアップ|転送]]してください: |
+ | 仮想マシンから、ターミナルを開いてシステムを [[rsync によるフルシステムバックアップ|転送]] してください: |
# rsync -aAXv /* /path/to/shared/folder --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/home/*/.gvfs} |
# rsync -aAXv /* /path/to/shared/folder --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/home/*/.gvfs} |
||
30行目: | 31行目: | ||
=== Chroot とブートローダーの再インストール === |
=== Chroot とブートローダーの再インストール === |
||
− | "ライブ" GNU/Linux ディストリビューションを起動して、ルートパーティションをマウントして [[chroot]] してください。[[ビギナーズガイド#Chroot とベースシステムの設定]]を参照。 |
+ | "ライブ" GNU/Linux ディストリビューションを起動して、ルートパーティションをマウントして [[chroot]] してください。[[ビギナーズガイド#Chroot とベースシステムの設定]] を参照。 |
− | ブートローダーを再インストールしてください: [[Syslinux]], [[GRUB]], [[Gummiboot]] のどれかを使います。[[ビギナーズガイド#ブートローダのインストールと設定]]に従ってください。忘れずに設定ファイルを更新します: Syslinux の場合は {{ic|syslinux.cfg}}、Grub の場合は {{ic|grub.cfg}}、Gummiboot の場合は {{ic|/boot/loader/entries/}} のブートエントリです。 |
+ | ブートローダーを再インストールしてください: [[Syslinux]], [[GRUB]], [[Gummiboot]] のどれかを使います。[[ビギナーズガイド#ブートローダのインストールと設定]] に従ってください。忘れずに設定ファイルを更新します: Syslinux の場合は {{ic|syslinux.cfg}}、Grub の場合は {{ic|grub.cfg}}、Gummiboot の場合は {{ic|/boot/loader/entries/}} のブートエントリです。 |
+ | |||
+ | {{Note|ブートローダーを再インストールせずに直接ブートできるかもしれません。chroot を使う前に試してみてください。そうすれば、ブートローダーを再インストールして、グラフィカルな環境から ramfs を再生成できる可能性があります。}} |
||
=== fstab の修正 === |
=== fstab の修正 === |
||
58行目: | 61行目: | ||
# dd if=/dev/zero of=/media/Backup/backup.img bs=1024 count=10482381 |
# dd if=/dev/zero of=/media/Backup/backup.img bs=1024 count=10482381 |
||
− | {{Tip|{{ic|fallocate}} を使 |
+ | {{Tip|{{ic|fallocate}} を使用するとはるかに高速になります: |
+ | |||
+ | # fallocate -l 10GiB -o 1024 /media/Backup/backup.img |
||
+ | }} |
||
ルートパーティションと全く同じ要領のイメージを作成したい場合、{{ic|fdisk -l}} を実行して出力された {{ic|Blocks}} カラムの値を {{ic|1=count=}} パラメータで指定してください。ルートツリー全体を転送するので、{{ic|/boot}} や {{ic|/home}} フォルダも転送することになります。パーティションを分割する場合は、コンテナを作成するときに注意してください。 |
ルートパーティションと全く同じ要領のイメージを作成したい場合、{{ic|fdisk -l}} を実行して出力された {{ic|Blocks}} カラムの値を {{ic|1=count=}} パラメータで指定してください。ルートツリー全体を転送するので、{{ic|/boot}} や {{ic|/home}} フォルダも転送することになります。パーティションを分割する場合は、コンテナを作成するときに注意してください。 |
||
+ | |||
+ | お気に入りの [[パーティショニング#パーティショニングツール|パーティショニングツール]] を実行して、{{ic|/media/Backup/backup.img}} ファイルをパーティション分割します。その上にパーティションテーブルを作成し (例:{{ic|msdos}})、[[パーティショニング#パーティションスキーム|パーティションスキーム]] を選択してパーティションを作成します。 |
||
必要なモジュールをロードしてループバックデバイスとしてマウントします (例として {{ic|/dev/loop5}} にマウント): |
必要なモジュールをロードしてループバックデバイスとしてマウントします (例として {{ic|/dev/loop5}} にマウント): |
||
67行目: | 75行目: | ||
# losetup /dev/loop5 /media/Backup/backup.img |
# losetup /dev/loop5 /media/Backup/backup.img |
||
− | 次に、適当な[[パーティショニング#パーティショニングツール|パーティショニングツール]]を実行して {{ic|/dev/loop5}} のパーティショニングを行なってください。デバイスにパーティションテーブルを作成 (例: |
+ | 次に、適当な [[パーティショニング#パーティショニングツール|パーティショニングツール]] を実行して {{ic|/dev/loop5}} のパーティショニングを行なってください。デバイスにパーティションテーブルを作成 (例:{{ic|msdos}}) したら、[[パーティショニング#パーティションスキーム|パーティションスキーム]]を選択してパーティションを作成します。それからパーティションに[[ファイルシステム]]を作成してください。パーティションは {{ic|/dev/loop5p1}} や {{ic|/dev/loop5p2}} などとなります。 |
=== システムの転送 === |
=== システムの転送 === |
||
81行目: | 89行目: | ||
=== コンテナを互換性のある形式に変換 === |
=== コンテナを互換性のある形式に変換 === |
||
− | + | 目的の仮想マシンに応じて適切なコマンドを選択してください。 |
|
+ | |||
+ | '''KVM''' コンテナに変換するには、{{pkg|qemu-desktop}} を以下のコマンドラインで使用します: |
||
+ | |||
+ | $ qemu-img convert -c -f raw -O qcow /media/backup.img /media/backup.qcow2 |
||
+ | |||
+ | '''VirtualBox''' コンテナに変換するには、{{pkg|virtualbox}} を以下のコマンドラインで使用します: |
||
+ | |||
+ | $ VBoxManage convertfromraw --format VDI /media/backup.img /media/backup.vdi |
||
+ | |||
+ | '''VMware''' コンテナに変換するには、''virtualbox'' を以下のコマンドラインで使用します: |
||
+ | $ VBoxManage convertfromraw --format VMDK /media/backup.img /media/backup.vmdk |
||
− | $ cd /media/Backup |
||
− | $ qemu-img convert -c -f raw -O qcow backup.img backup.qcow2 |
||
− | $ VBoxManage convertfromraw --format VDI backup.img backup.vdi |
||
− | $ VBoxManage convertfromraw --format VMDK backup.img backup.vmdk |
||
=== Chroot とブートローダーの再インストール === |
=== Chroot とブートローダーの再インストール === |
||
165行目: | 180行目: | ||
=== "Missing operating system. FATAL: INT18: BOOT FAILURE" === |
=== "Missing operating system. FATAL: INT18: BOOT FAILURE" === |
||
− | * ブートローダーを |
+ | * ブートローダーを(再)インストールする必要があります。[[ブートローダー]]を見てください。 |
* [[Btrfs]] ファイルシステムで {{ic|/boot}} を圧縮すると、[[Syslinux]] で起動できなくなります。 |
* [[Btrfs]] ファイルシステムで {{ic|/boot}} を圧縮すると、[[Syslinux]] で起動できなくなります。 |
2023年12月17日 (日) 02:33時点における最新版
この記事では Arch Linux の現在の環境を仮想環境 (QEMU, VirtualBox, VMware) に、あるいは仮想環境から移動する方法を説明します。rsync によるフルシステムバックアップ の記事が元になっています。仮想マシン (略して "VM") が使用するハードウェアは異なるので、initramfs イメージを再生成して fstab を修正する必要があります (特に SSD を使っている場合)
VM から移動
仮想環境から移動するのは比較的簡単です。
共有フォルダの設定
ゲストの仮想マシンと使用しているハイパーバイザのホストに共有フォルダを設定してください。詳しくは仮想環境の wiki ページを参照してください。
ext4 パーティションが存在しない場合は、ビギナーズガイド#デバイスの確認 を参照。
Windows を使っている場合は Ext2Fsd をインストールして ext ボリュームがマウントできるようにしてください。
システムの転送
仮想マシンから、ターミナルを開いてシステムを 転送 してください:
# rsync -aAXv /* /path/to/shared/folder --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/home/*/.gvfs}
Chroot とブートローダーの再インストール
"ライブ" GNU/Linux ディストリビューションを起動して、ルートパーティションをマウントして chroot してください。ビギナーズガイド#Chroot とベースシステムの設定 を参照。
ブートローダーを再インストールしてください: Syslinux, GRUB, Gummiboot のどれかを使います。ビギナーズガイド#ブートローダのインストールと設定 に従ってください。忘れずに設定ファイルを更新します: Syslinux の場合は syslinux.cfg
、Grub の場合は grub.cfg
、Gummiboot の場合は /boot/loader/entries/
のブートエントリです。
fstab の修正
ルートツリー全体を単一のパーティションに転送したので、/etc/fstab ファイルを編集してパーティションの変更を反映させる必要があります。
chroot の中では lsblk
はあまり役に立たないので blkid
コマンドを使ってパーティションを確認してください。
initramfs イメージの再生成
ハードウェアが変わったので、chroot の中にいる間に、initramfs イメージを再生成してください:
# mkinitcpio -p linux
仮想マシンでホスト OS のネットワーク設定を使っていた場合、ネットワークを設定する必要があります。ビギナーズガイド#ネットワークの設定を見てください。
VM に移動
仮想マシンの中に移動するのは少し骨が折れます。
コンテナの作成
以下のコマンドで 10 GB の raw イメージを作成します:
# dd if=/dev/zero of=/media/Backup/backup.img bs=1024 count=10482381
ルートパーティションと全く同じ要領のイメージを作成したい場合、fdisk -l
を実行して出力された Blocks
カラムの値を count=
パラメータで指定してください。ルートツリー全体を転送するので、/boot
や /home
フォルダも転送することになります。パーティションを分割する場合は、コンテナを作成するときに注意してください。
お気に入りの パーティショニングツール を実行して、/media/Backup/backup.img
ファイルをパーティション分割します。その上にパーティションテーブルを作成し (例:msdos
)、パーティションスキーム を選択してパーティションを作成します。
必要なモジュールをロードしてループバックデバイスとしてマウントします (例として /dev/loop5
にマウント):
# modprobe loop # losetup /dev/loop5 /media/Backup/backup.img
次に、適当な パーティショニングツール を実行して /dev/loop5
のパーティショニングを行なってください。デバイスにパーティションテーブルを作成 (例:msdos
) したら、パーティションスキームを選択してパーティションを作成します。それからパーティションにファイルシステムを作成してください。パーティションは /dev/loop5p1
や /dev/loop5p2
などとなります。
システムの転送
ループバックデバイスをマウントしてシステムを転送してください:
# mkdir /mnt/Virtual # mount /dev/loop5p1 /mnt/Virtual # rsync -aAXv /* /mnt/Virtual --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/home/*/.gvfs}
コンテナを互換性のある形式に変換
目的の仮想マシンに応じて適切なコマンドを選択してください。
KVM コンテナに変換するには、qemu-desktop を以下のコマンドラインで使用します:
$ qemu-img convert -c -f raw -O qcow /media/backup.img /media/backup.qcow2
VirtualBox コンテナに変換するには、virtualbox を以下のコマンドラインで使用します:
$ VBoxManage convertfromraw --format VDI /media/backup.img /media/backup.vdi
VMware コンテナに変換するには、virtualbox を以下のコマンドラインで使用します:
$ VBoxManage convertfromraw --format VMDK /media/backup.img /media/backup.vmdk
Chroot とブートローダーの再インストール
コンテナを VM に接続して、VM の仮想 CD-ROM として Linux の LiveCD (例: 最新の Arch Linux ISO) をセットしたら、VM を起動して chroot してください:
# mount /dev/sda1 /mnt # arch-chroot /mnt /bin/bash
ビギナーズガイド#ブートローダのインストールと設定に従って Syslinux や GRUB を再インストールします。設定ファイルを忘れずに更新してください:
- Syslinux の場合、
syslinux.cfg
のAPPEND root=/dev/sda1 ro
です。
- GRUB の場合、
grub.cfg
を自動で再生成することを推奨します。
fstab の修正
ルートツリーを単一のパーティションに転送したら、fstab ファイルを編集してください。UUID やラベルを使うこともできますが、ドライブやパーティションが一つしかない場合はあまり意味がありません (混乱する余地がないから)。以下の例では /dev/sda1
だけを設定しています。
/etc/fstab
tmpfs /tmp tmpfs nodev,nosuid 0 0 /dev/sda1 / ext4 defaults,noatime 0 1
Xorg 関連ファイルの無効化
Xorg の設定ファイルの Device
セクションに nvidia
, nouveau
, radeon
, intel
などのエントリがあると起動ができません。これからはエミュレートされたハードウェアを使用するからです (ビデオカードも含む)。従って、以下のようにファイルを移動したり削除することを推奨します:
# mv /etc/X11/xorg.conf /etc/X11/xorg.conf.bak # mv /etc/X11/xorg.conf.d/10-monitor /etc/X11/xorg.conf.d/10-monitor.bak
initramfs イメージの再生成
ハードウェアが変わったので、chroot に入っている間に、initramfs イメージを再生成してからシャットダウンを実行してください:
# mkinitcpio -p linux # exit # umount -R /mnt # poweroff
最後に、LiveCD (ISO ファイル) を排出して、仮想マシンを起動してください。
トラブルシューティング
"mount: special device /dev/loop5p1 does not exist"
まず、fdisk
でループバックデバイスの開始ブロックを確認してください:
# fdisk -l /dev/loop5
Disk /dev/loop5: 10.7 GB, 10733958144 bytes 255 heads, 63 sectors/track, 1304 cylinders, total 20964762 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000b45e8 Device Boot Start End Blocks Id System /dev/loop5p1 * 2048 20963327 10480640 83 Linux
そしてマウントするときに開始ブロックをオフセットとして使ってください:
# mount -o offset=$((2048 * 512)) /dev/loop5 /mnt/Virtual/
"Waiting 10 seconds for device /dev/sda1; ERROR: Unable to find root device '/dev/sda1'"
Waiting 10 seconds for device /dev/sda1 ... ERROR: Unable to find root device '/dev/sda1'. You are being dropped to a recovery shell Type 'exit' to try and continue booting sh: cannot access tty; job control turned off [rootfs /]# _
おそらく poweroff
が実行されておらず、また、VM を閉じるボタンで終了していません (これは電源を切るのと同じです)。initramfs イメージを再生成する必要があります。フォールバックエントリを使って VM を起動します。フォールバックエントリがない場合、Tab
(Syslinux) や e
(GRUB) を押して initramfs-linux-fallback.img
に名前を変えてください。起動後、ターミナルを開いて以下を実行:
# mkinitcpio -p linux # poweroff
"Missing operating system. FATAL: INT18: BOOT FAILURE"
- ブートローダーを(再)インストールする必要があります。ブートローダーを見てください。
- BIOS や VM 設定のブート順序が正しく設定されていません。ブートローダーが含まれているドライブが一番最初に起動するようになっているか確認してください。
メンテナンスで root パスワードが要求される
:: Checking Filesystems [BUSY] fsck.ext4: Unable to resolve '...'
/etc/fstab
にドライブの UUID やラベル、あるいはデバイス名が追加されていません。UUID はフォーマット (もしくは新規作成) するたびに変わるので、一致しなくなります。blkid
で確認してください。