web-dev-qa-db-ja.com

btrfsはルートのスナップショットを元に戻しますFS

Fedora 25にアップグレードする前に、私はbtrfs subvolume snapshot / /f24を実行しました。空き容量が少ないのが嫌なので、更新に失敗しました。ここで問題は、スナップショットを元に戻す方法です。 grub.cfgを編集して(rootflags=subvol=root/f24を設定)、スナップショットを既に起動しました。

  1. この男btrfs subvolume delete rootだけに言います。しかし、grub2が次のカーネルアップデートで不正なgrub.cfgを再生成するかどうかはわかりません。また、delete rootrm -rf /のような操作のように聞こえます。

  2. この男 rsyncを使用して、スナップショットからルートにデータをコピーしました。動作すると確信していますが、2013年の回答であり、スナップショットを元に戻すためのより良い方法があると思います。

  3. mvを使用するだけ」、通常はapt-btrfs-snapshotと一緒に使用することが何度かあります。 mv /f24 /が実際に機能するようには聞こえません。 (もしそうなら、私を訂正してください。)

最後に、元に戻されたスナップショットには、もちろんroot/f24ではなくrootという名前を付ける必要があります。 FSに関する情報は次のとおりです。

$ btrfs subvolume list /
ID 257 gen 419417 top level 5 path root
ID 3231 gen 419430 top level 257 path root/f24

スナップショットを起動します:

$ btrfs subvolume show /
/
    Name:           f24
    UUID:           b1782609-7d9f-4725-911d-428cda2256c7
    Parent UUID:        8df6fae9-770a-4d55-a4bf-6a32edf1fbd7
    Received UUID:      -
    Creation time:      2016-11-26 19:17:22 +0200
    Subvolume ID:       3231
    Generation:         419438
    Gen at creation:    411444
    Parent ID:      257
    Top level ID:       257
    Flags:          -
    Snapshot(s):

これを行う2016年の方法はありますか?

3
Mathias

現在のサブボリュームも目的のサブボリュームも「実際の」Btrfsルート、つまりサブボリュームID 0ではないという事実によって、状況は多少単純化されています。

次のように、実際のBtrfsルートを(一時的に)マウントすることから始めます。

mkdir /mnt/btrfs-root
mount -o subvolid=0 /dev/somedevice /mnt/btrfs-root

これで、btrfs-root内で、サブボリュームの「ルート」と、そこで定義した他のサブボリュームを確認できるはずです。プレーンなmvを使用して、必要な方法でそれらを再配置できます。

cd /mnt/btrfs-top
mv -i root/f24 newroot
# Now at least you don't have one subvolume rooted inside another
# It's a little simpler to work with.

# Now just shuffle them as desired
mv -i root oldroot
mv -i newroot root

# ...and clean up
cd
umount /mnt/btrfs-top
rmdir /mnt/btrfs-top

これで、次に「root」というサブボリュームをマウントすると、新しいサブボリュームになります。

Subvolidでルートファイルシステムをマウントしないように注意してください。 subvolidでマウントしている場合は、上記のように名前を変更しても、subvolidは変更されません。

  • デフォルトのサブボリュームに依存してファイルシステムをマウントしている場合は、デフォルトのサブボリュームを新しいサブボリュームに変更する必要があります。

    btrfs subvolume set-default 3231 /
    
  • 明示的なsubvolid仕様でマウントする場合は、/etc/fstab/etc/default/grubsubvolid=3231を使用するように変更する必要があります。

4
Celada