BTRFS サブボリュームを汎用ディレクトリに変換

BTRFS サブボリュームを汎用ディレクトリに変換

したがって、ルートサブボリュームにBTRFSサブボリュームがあり、ハードリンクと参照リンクをそのまま維持しながら、できるだけ早く通常のディレクトリに変換したいとします。見つけることができるショートカットがありますか?特に大容量サブボリュームの場合は、これを数秒で簡単に実行する方法についてのドキュメントが見つかりません。

答え1

簡単にmv内容を読んでください。これに関して、サブボリュームはディレクトリに過ぎない。ハードリンクのようなもので簡単なテストをしてみましたが、簡単な移動だけでも期待通りに動作しました。

$ mkdir tmp
$ cd tmp
$ btrfs subvolume create sub
Create subvolume './sub'
$ echo 1 > file
$ ln file hard
$ echo 2 >> hard
$ cat file
1
2
$ ls -1i file hard
20803239 file
20803239 hard
# create 5 Gb file with random data to see if it later moves (fast) or copies (slower)
$ dd if=/dev/urandom of=rand bs=1G count=5
$ btrfs filesystem du rand
     Total   Exclusive  Set shared  Filename
   5.00GiB     5.00GiB       0.00B  rand
$ cp --reflink=always rand rand-ref
$ echo something >> rand-ref
$ btrfs filesystem du rand
     Total   Exclusive  Set shared  Filename
   5.00GiB       0.00B     5.00GiB  rand
$ btrfs filesystem du rand-ref
     Total   Exclusive  Set shared  Filename
   5.00GiB     4.00KiB     5.00GiB  rand-ref
$ truncate -s 10G sparse
$ btrfs filesystem du sparse
     Total   Exclusive  Set shared  Filename
     0.00B       0.00B       0.00B  sparse
$ ls
file  hard  rand  rand-ref  sparse  sub

すべてのコンテンツをサブボリューム「sub」に移動します。

$ mv file hard rand rand-ref sparse sub/

結果を確認して

$ ls -1i file hard
257 file
257 hard
$ btrfs filesystem du rand rand-ref sparse
     Total   Exclusive  Set shared  Filename
   5.00GiB       0.00B     5.00GiB  rand
   5.00GiB     4.00KiB     5.00GiB  rand-ref
     0.00B       0.00B       0.00B  sparse

PS:サブボリュームを変換したいからです。これを行うように指示がないと思います。空のサブボリュームを削除してコンテンツを再移動するのではなく、コンテンツを別の場所に移動してください。

関連情報