openSUSE Tumbleweedを実行していますが、btrfsサブボリュームをマウントするときに奇妙な動作が見つかりました。 btrfsファイルシステムには2つのサブボリュームがあります@media
。@migration
私の/etc/fstab
設定は次のとおりです。
UUID=<UUID> /mnt/media btrfs subvol=/@media,noatime,noexec,nodev,nosuid 0 0
UUID=<UUID> /mnt/migration btrfs subvol=/@migration,noatime,noexec,nodev,nosuid 0 0
ただし、実行すると、mount -a
次のような結果が表示されます。
/dev/sdb1 on /mnt/media type btrfs (rw,nosuid,nodev,noexec,noatime,space_cache=v2,subvolid=278,subvol=/@media)
/dev/sdb1 on /mnt/migration type btrfs (rw,relatime,space_cache=v2,subvolid=279,subvol=/@migration)
ご覧のとおり、マウントオプションは最初にnosuid,nodev,noexec,noatime
マウントされたサブボリュームにのみ適用されるようです。 2番目だけrelatime
。
私が試したとき再インストール2番目のサブボリュームは正しく表示されます。
:~> sudo mount -o remount,noatime /dev/sdb1 /mnt/migration
:~> mount | tail -n 2
/dev/sdb1 on /mnt/media type btrfs (rw,nosuid,nodev,noexec,noatime,space_cache=v2,subvolid=278,subvol=/@media)
/dev/sdb1 on /mnt/migration type btrfs (rw,noatime,space_cache=v2,subvolid=279,subvol=/@migration)
だから私の質問は次のようになります
- 後続のサブボリュームのマウントオプションは重要ですか? (つまり、これはただの視覚的なエラーですか?)
- マウントオプションが実際に適用されているかどうかを確認する方法はありますか?
答え1
サブボリュームのマウントは実際にはnoatimeに従います。これは新しいbtrfsドキュメントに明示的に指定されています(不明ですが)。https://btrfs.readthedocs.io/en/latest/btrfs-subvolume.html#mount-options
(彼らは私が来た目的のnoexecもサポートしています。)
$ sudo mount -o subvolid=257,noatime /dev/sdd1 test
$ touch -a -t 9001010101 test/foo
$ stat test/foo
Access: 1990-01-01 01:01:00.000000000 -0700
$ cat test/foo # noatime: atime unchanged
$ stat test/foo
Access: 1990-01-01 01:01:00.000000000 -0700
$ sudo umount test
$ sudo mount -o subvolid=257 /dev/sdd1 test
$ cat test/foo # default (relatime): atime changed
$ stat test/foo
Access: 2023-09-20 03:50:37.919732794 -0600
(簡潔にするために、statの他の出力ラインは切り捨てられました。)
答え2
私の評判が50未満なので、スクワクルさんのセルフ答弁についてはコメントすることができませんね。しかし、テストには欠陥があります。touch -a
Atime は、マウントポイントオプションに関係なく更新されます。
/tmp
32% ❯ sudo mount -t tmpfs -o noatime none noatime
/tmp
32% ❯ cd noatime/
/tmp/noatime
32% ❯ touch banana
/tmp/noatime
32% ❯ stat banana
File: banana
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 0,116 Inode: 2 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/vytautas) Gid: ( 100/ users)
Access: 2022-04-14 00:03:14.714042647 +0300
Modify: 2022-04-14 00:03:14.714042647 +0300
Change: 2022-04-14 00:03:14.714042647 +0300
Birth: -
/tmp/noatime
32% ❯ cat banana
/tmp/noatime
32% ❯ stat banana
File: banana
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 0,116 Inode: 2 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/vytautas) Gid: ( 100/ users)
Access: 2022-04-14 00:03:14.714042647 +0300
Modify: 2022-04-14 00:03:14.714042647 +0300
Change: 2022-04-14 00:03:14.714042647 +0300
Birth: -
/tmp/noatime
32% ❯ touch -a -t 1212121212 banana
/tmp/noatime
32% ❯ stat banana
File: banana
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 0,116 Inode: 2 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/vytautas) Gid: ( 100/ users)
Access: 2012-12-12 12:12:00.000000000 +0200
Modify: 2022-04-14 00:03:14.714042647 +0300
Change: 2022-04-14 00:03:39.030547903 +0300
Birth: -
答え3
私はbtrfs wikiといくつかの簡単な実験を使って私の質問に答えました。
後続のサブボリュームのマウントオプションは重要ですか?
いいえ。~によるとウィキペディア:
メモ:ほとんどのマウントオプションはファイルシステム全体に適用され、最初にマウントされたサブボリュームのオプションのみが適用されます。これは実装の欠如によるものであり、今後変更される可能性があります。これは、たとえば、マウントオプションを使用してサブボリュームごとにnodatacow、nodatasum、または圧縮を設定できないことを意味します。この問題は最終的に解決されるべきですが、Linux VFSフレームワーク内で正しく実装するのが難しいことが証明されています。
マウントオプションが実際に適用されているかどうかを確認する方法はありますか?
はい。私はatime
/パラメータを使ってnoatime
これをしました。
atime
オプション1を使用したサブボリュームのマウントnoatime
オプション2を使用したサブボリュームのマウント- サブボリューム2にテストファイルを作成する
- atimeを任意の値に設定するために使用されます
touch
(例touch -a -t 12121212 test_file
:) - atimeがテスト値に設定されていることを確認する
ls -lu
この実験では、サブボリューム2はこのオプションでマウントされていますが、そのatimeがサブボリューム2で更新されたことを示していますnoatime
。これはatime
、このオプションを使用してサブボリューム1が最初にマウントされるためです。