既存のフルディスクbtrfs(パーティション化されていない)ファイルシステムをbcacheに変換したいと思います。
これを行うには、データを移動してドライブを再フォーマットする必要がありました。
ほんの数ステップでこれを行うのに十分なハードドライブ容量があります。
私はbtrfsを使用しているので、これを簡単にするとbtrfs send
思いました。btrfs receive
まず、変換したいファイルシステムの読み取り専用スナップショットを作成し、それを別のファイルシステムのサブボリュームに送信し始めました。
私にとって不明な点は、スーパーブロック変換が発生した後に対応する冗長サブボリュームを元のディスクに復元する方法です。
マンページにはbtrfs receive
新しいサブボリュームのみを作成でき、プロセスが完了するとそのサブボリュームを読み取り専用にすることができます。
それでは、受信したスナップショットで書き込み可能な新しいルートサブボリュームを置き換える方法は?
答え1
それでは、受信したスナップショットで書き込み可能な新しいルートサブボリュームを置き換える方法は?
あなたはできません。
あなたの場合、トップレベル(ルート)サブボリューム(ID 5)は/
Linuxファイルシステムのボリュームであり、隣接するものはありません。ご存知のように、btrfs-receive
読み取り専用サブボリュームを作成するため、読み取り専用サブボリュームから読み取り/書き込みスナップショットサブボリュームを作成する必要があります。これを行うには、外部からサブボリュームを作成できる必要があります/
。置き換えることはできません。トップレベルのサブボリュームの理由です。
次のように言われました。
読み取り専用スナップショットを作成しました。FSまず変換して次に送りたいです。サブボリューム他のfsから。
しかし、あなたがすることは読み取り専用のスナップショットを作成することです。サブボリューム、全体のBTRFSファイルシステムではありません。トップレベルのスナップショットを作成する方法はわかりません。奇妙な。
partclone
最善の方法は、ファイルシステム全体をバックアップしてから復元するなどのツールを使用することです。それ以外の場合は、サブボリュームを変更する必要があります。ボールでリストしたもの~から平らな、これがあなたが持っているものです入れ子になった。入れ子になったレイアウトを使用すると、次のような結果が得られます。
/ (top-level)
|
|__ /rootfs (subvolume)
| |
| _/home
|
|__ /rootfs-backup (read-only subvolume, which you can delete later)
| |
| _/home
ネストしたレイアウトを使用すると、ファイルシステムのすべてのサブボリュームのスナップショットを作成できます(とにかく実行する必要がない最上位レベルを除く)。その後、ファイルシステム全体ではなくrootfs
サブボリュームのみをマウントします。/
たとえば、mount -t btrfs /dev/sda1 -o defaults,subvol=/rootfs
答え2
私が受け取るものは何でも新しい読み取り専用サブボリュームになります。これがBtrfsがどのように機能するかです。 Emmanuelが他の答えで示唆したように、これを別の方法で行う明確で直感的な方法はありません。
受信したサブボリュームをルートボリュームとして機能させる手順は次のとおりです。
cd /mnt/drv/receivedvolume
btrfs property set -ts . ro false # make it writeable
btrfs subvolume list . # take note of the ID of the volume, i'll use 123 here
btrfs subvolume set-default 123 /mnt/drv
より安心するために、インストールsubvolid=123
オプション/etc/fstab
やその他のインストールタスクを追加することもできます。
これが実際にシステムの問題である場合は、/ブートローダを再インストールする必要があるかもしれません