実行中のシステム内からルートファイルシステムを別のパーティションに移行するにはどうすればよいでしょうか?

実行中のシステム内からルートファイルシステムを別のパーティションに移行するにはどうすればよいでしょうか?

私はルートファイルシステムをext4から別のパーティションタイプ(zfs)に移行しようとしており、単純な

rsync -a --exclude=/boot --exclude=/mnt --exclude=/media --exclude=/tmp 
--exclude=[all zfs pools with default mountpoint] 
/ /target/directory/mountpoint/

その後、転送は の別のファイルで止まり/proc、 を追加した後、--exclude=/proc rsyncのファイルで止まり/sys/devices、試行錯誤をあきらめました。man procと について読んだ後、 /sysウィキペディア) 簡単な解決策を見つけるには、もっと多くの調査が必要だとわかっています。どなたか助けていただければ幸いです。ルート システムは Ubuntu 14.04 amd64 です (ライブ システムも同様ですが、それが制限事項である場合は遠慮なく提案してください)。

もちろん、ライブ システムを起動してそこにデータをコピーするのは簡単ですが、これは質問に対する回避策にすぎません。

答え1

起動が実際に機能するかどうかをテストできるシステムを持っていないので、この点については免責事項から始めます。この回答は私の理解に基づくものであり、機能することを確認するまでは開発システムでのみ試してください。

/dev、、はすべて仮想ファイルシステムなので/sys/procOS は起動時にその内容を作成するはずです。これが本当であれば、次の操作を実行できるはずです。

rsync -ax / /target/directory/mountpoint

-x は rsync にファイルシステムの境界を越えないように指示するため、仮想ファイルシステムをスキップし、zfs プールを指定する必要はありません。マウント ポイントは作成されますが、空になります。

/tmp が独自のパーティションではなく、それらのファイルをコピーしたくない場合は、手動で--excludeコピーする必要があります。

答え2

LVM を実行しているかどうかを確認します。実行している場合は、LVM を使用してファイル システムのスナップショットを作成し、そこからコピーすることができます。

これらが発明されたのは、静止ファイル システムからバックアップを作成する必要があるためで、そうしないとバックアップがあまり役に立ちません。スナップショットは、デバイス間の問題と一時ファイルの問題の両方を解決します。

データベースなどのアクティブな大きなファイルがある場合、ファイルの一部はデータベースの変更前にコピーされ、他の部分は変更後にコピーされるため、rsync やその他のバックアップでは不整合なバージョンが生成される可能性があることに注意してください。スナップショットもこの問題を解決するための試みです。

注意: btrfs はファイル システムのスナップショットを作成する優れた形式ですが、すでに ext4 を実行している場合は、今回は遅すぎます。

答え3

補足: 可能であれば (ローカル コンソールを使用している場合は可能ですが、ssh 経由で接続している場合やシステムを完全に実行したままにする必要がある場合は不可能です)、このようなことを行う前に、実行レベル 1 (「シングル ユーザー モード」、コマンドは「init 1」) に変更してください。これにより、コピー中にファイル システム内の情報を変更する可能性のある、重要でないプロセスがすべて停止されます。

特に UUID が使用されている場合は、fstab を調整することに留意してください。

新しく複製されたファイルシステムをテストし、場合によってはブートローダーを再インストールするには、「chroot /where/the/new/root/is/mounted /bin/bash」の使用を検討してください。chroot の下に /proc と /sys を手動でマウントする必要がある場合があります。

chroot からブートローダを再インストールする場合は、/etc/mtab (chroot されたシステム内) にローダ インストーラを混乱させるゴミが含まれていないことを確認してください。grub 1.x の場合は、(新しい) /boot/device.map ファイルを削除する必要があるかもしれません。

/dev を安全に使用したい場合は、(新しいファイルシステムで)「MAKEDEV generic」を追加できます。これにより、udev マウント ポイントの「下」にデバイス ファイルのセットが作成され、udev が機能しない場合でも起動時にシステムがクラッシュすることがなくなります。

関連情報