私はBTRFSでArchLinuxを実行しています。このコンピューターには3台の物理HDDがあります(RAIDなどはありません)。 /
、/cow
、/nocow
にディスクをマウントしています。これがfstabです:
# /etc/fstab
# <file system> <dir> <type> <options> <dump> <pass>
UUID=a101 / btrfs rw,noatime,nodiratime,compress=lzo,space_cache,subvol=/@ 0 0
UUID=b202 /cow btrfs rw,noatime,nodiratime,compress=lzo,space_cache,subvol=/@cow 0 0
UUID=c303 /nocow btrfs rw,noatime,nodiratime,compress=lzo,space_cache,nodatacow,subvol=/@nocow 0 0
nodatacow
はファイルシステムマウントオプションであるため、使用するとそのファイルシステムのマウントされたすべてのサブボリュームに適用されますになることを理解しています。しかし、私はファイルシステムの明確な定義を持っていません。ファイルシステムが複数のディスクにまたがることがある場合があります。それは上記のfstabで何が起こっているのですか? 1つのディスクをnodatacow
でマウントすると、そのオプションが私の物理ディスクのつすべてに適用されますか?または、各ディスクを個別にフォーマットし、各ディスクにBTRFSファイルシステムを作成した場合、3つの個別のファイルシステムがありますか?
関連するトピックで、nodatacowを有効にすると、圧縮が無効になることを理解しています。これは、次のように、3番目のディスクをマウントするためのオプションからcompress=lzo
を削除する必要があることを意味すると思います。
UUID=c303 /nocow btrfs rw,noatime,nodiratime,space_cache,nodatacow,subvol=/@nocow 0 0
最も重要な質問は、この3番目のディスクをnodatacow
オプションでマウントすると、ファイルシステム全体(3つのディスクすべてと/
の下のすべてのディレクトリ)に影響するのか、マウントポイントの下のファイルシステム(の一部)だけに影響するのかです。 /nocow
。
chattr +C /nocow
を使用する方が良いでしょうか?その属性が後でそのディレクトリにマウントされる(そしてnodatacow
オプションなしでマウントされる)ファイルシステムに影響を与えるかどうかわからないため、私はそれをしませんでした。
/nocow
はいくつかのmysqlデータベースを保持します。
Nodatacowはファイルシステムのマウントオプションであるため、使用すると、そのファイルシステムのマウントされたすべてのサブボリュームに適用されることを理解しています。しかし、私はファイルシステムの明確な定義を持っていません。ファイルシステムが複数のディスクにまたがることがある場合があります。それは上記のfstabで何が起こっているのですか?
3つの異なるUUIDをマウントしているので、実際には3つの別々のファイルシステムがあると思います。
ただし、マウントでサブボリュームも指定しています。これは、おそらく次のレイアウトがあることを示しています。
HDD1
└──── Filesystem 1 (a101)
└──── Subvolume /@ mounted at /
HDD2
└──── Filesystem 2 (b202)
└──── Subvolume /@cow mounted at /cow
HDD3
└──── Filesystem 3 (c303)
└──── Subvolume /@nocow mounted at /nocow
3つの個別のファイルシステムがあり、それぞれに1つのサブボリュームがあります。この場合、nodatacow
マウントオプションを3つのファイルシステムのそれぞれに個別に適用できます。
ただし、btrfs
を使用すると、ファイルシステムを1つだけ(複数のHDDにまたがり、何らかの形式のRAIDを使用することもありますが、必ずしもそうとは限りません)、その1つのファイルシステムの別々のサブボリューム(フォルダーと同様)を別々の場所にマウントすることもできます。これは、次のようなレイアウトになることを意味します。
HDD1 [...HDDn]
└──── Filesystem 1
├──── Subvolume /@ mounted at /
├──── Subvolume /@cow mounted at /cow
└──── Subvolume /@nocow mounted at /nocow
その場合、nodatacow
マウントオプションは、同じファイルシステム上にあるため、すべてのサブボリュームに適用されます。
Nodatacowを使用して1つのディスクをマウントすると、そのオプションが3つの物理ディスクすべてに適用されますか?
番号。
または、各ディスクを個別にフォーマットし、各ディスクにBTRFSファイルシステムを作成した場合、3つの個別のファイルシステムがありますか?
はい。
関連するトピックで、nodatacowを有効にすると、圧縮が無効になることを理解しています。
これは真実であり[1]、/ nocowマウントでそのマウントオプションを削除できます。ただし、3つの別個のファイルシステムがあるため、必要に応じて、他の2つ(/および/ cow)を圧縮を有効にしてマウントすることもできます。
chattr +C /nocow
を使用する方が良いでしょうか?
Nocow操作を実現するためにこのような拡張ファイル属性を使用することは可能な代替手段です だが:
chattr +C
する必要があります。chattr +C
になっているフォルダにのみ新しいファイルを作成するか、最初にtouch
してから、内容をそれらにコピーする必要があります(詳細は[2]を参照)。したがって、nodatacow
マウントオプションと別のファイルシステムをVMまたはすでに行ったものと同様のDBファイルに使用する方が簡単かもしれません(使用するかどうかを考えることができます)。このユースケースでは多くの利点がないため、そのファイルシステムのBtrfsはまったくありません。)
一般に、VMまたはbtrfsにDBファイルを保存する場合は、autodefrag
マウントオプションも含めることを検討してください。そうしないと、大きなVMまたはランダムなDBファイルが多いため)書き込みはすぐに断片化し、パフォーマンスを低下させる可能性があります[3]。
[2] https://btrfs.wiki.kernel.org/index.php/FAQ#Can_copy-on-write_be_turned_off_for_data_blocks.3F
[3] https://btrfs.wiki.kernel.org/index.php/Gotchas#Fragmentation