Linuxでもファイルのアクセス時刻の更新しない設定ができます。
/etc/fstabでマウントオプションを変更すれば良いだけです。
その前に、man mountでマウントオプションの確認をします。
takk@deb9:~$ man mount ~省略~ -o オプションの指定を行うには、 -o フラグに続けて各オプションをコン マで区切った文字列を書く。 オプションには、 /etc/fstab の中での み意味を持つものもある。 以下のオプションはマウントされるすべて の ファイルシステムに適用できるものである (但し、全てのファイル システムがこれらのオプションを引き受けるとは限らない。 例えば、 sync オプションは現在 ext2, ext3, ufs でのみ効果をもつ): async そのファイルシステムに対するすべての I/O が非同期 (asynchronous) に行われる。 atime アクセス毎に inode のアクセス時間を更新する。デフォルト。 auto -a が指定されたときにマウントされる。 defaults デフォルトのオプション: rw, suid, dev, exec, auto, nouser, async を用いる。 dev ファイルシステム上の キャラクタ・スペシャル・デバイスや ブロック・スペシャル・デバイスを 利用できるようにする。 exec バイナリの実行を許可する。 group 通常 (つまり root 以外) のユーザーの属するグループのうち の 1 つが デバイスのグループとマッチした場合に、 そのユー ザーがファイルシステムをマウントするのを許可する。 このオ プションはオプション nosuid と nodev を暗黙のうちに指定す る (ただし、オプション行で group,dev,suid のようにし て、その後のオプションで上書きしない限り)。 mand このファイルシステム上での強制 (mandatory) ロックを許可す る。 fcntl(2) を参照すること。 _netdev ネットワークアクセスが必要なデバイス上にあるファイルシス テム (システムでネットワークが使用可能になるまでは、 ファ イルシステムをマウントさせないために使われる)。 noatime そのファイルシステム上では inode のアクセス時間を更新しな い (例えばニュースサーバーをスピードアップしたいときなど に、 ニューススプールへのアクセス速度を向上させるために用 いられる)。 noauto 明示的に指定されたときのみマウントできる。 つまり -a オプ ションではマウントされない。 nodev このファイルシステム上にある キャラクタ・スペシャル・デバ イスや ブロック・スペシャル・デバイスを 使用できないよう にする。 noexec マウントされたファイルシステム上の任意のバイナリの直接実 行を禁止する。 (最近になるまで /lib/ld*.so /mnt/binary の ようなコマンドを使って、 バイナリを何とか実行することが可 能であった。 このトリックは Linux 2.4.25 / 2.6.0 以降では 失敗する。) nomand ファイルシステム上での強制ロックを禁止する。 nosuid SUID および SGID ビットを無効にする (これは安全なように見 えるが、 suidperl(1) がインストールされている場合には、実 際にはむしろ危険である)。 nouser 一般ユーザー (スーパーユーザー以外のユーザー) のマウント を禁止する。 これはデフォルトである。 owner 通常 (つまり root 以外) のユーザーがデバイスの所有者と マッチした場合に、 そのユーザーがファイルシステムをマウン トするのを許可する。 このオプションはオプション nosuid と nodev を暗黙のうちに指定する (ただし、オプション行で owner,dev,suid のようにして、その後のオプションで上書きし ない限り)。 remount すでにマウントされているファイルシステムを再マウントしよ うとする。 これは通常ファイルシステムのマウントフラグを変 更するとき (特にリードオンリーのファイルシステムを書き込 み可能にするとき) に用いられる。 デバイスとマウントポイン トを変更しない。 ro ファイルシステムをリードオンリーでマウントする。 rw ファイルシステムを読み書き可能なモードでマウントする。 suid SUID および SGID ビットを有効にする。 sync そのファイルシステムに対する I/O がすべて同期的 (synchronous) に行われる。 dirsync ファイルシステムにおける全てのディレクトリ更新を、 同期的 (synchronous) に行わせる。 このオプションは以下のシステム コールに影響する: creat, link, unlink, symlink, mkdir, rmdir, mknod, rename. user 一般ユーザーでもファイルシステムをマウントできるようにす る。 マウントを行ったユーザーの名前が mtab に書き込まれ、 そのユーザーがアンマウントできるようになる。 このオプショ ンを指定すると、同時に noexec, nosuid, nodev が指定された ことになる。 ただし続けて指定すれば上書きは可能。 すなわ ち user,exec,dev,suid のような行を指定すればよい。 users 全てのユーザーがファイルシステムをマウント・アンマウント 出来るようにする。 このオプションを指定すると、同時に noexec, nosuid, nodev が指定されたことになる。 ただし続け て指定すれば上書きは可能。 すなわち users,exec,dev,suid のような行を指定すればよい。
オプション、たくさんありますね。覚えるの大変そうです。
では、/etc/fstabを編集して、
takk@deb9:~$ sudo vi /etc/fstab
このようになりました。
takk@deb9:~$ cat /etc/fstab ~省略~ # / was on /dev/sda1 during installation UUID=省略 / ext4 errors=remount-ro,noatime 0 1 # swap was on /dev/sda5 during installation UUID=省略 none swap sw 0 0 /dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
確認したら再起動します。
takk@deb9:~$ reboot
再起動したら、アクセス時刻が更新されるか試してみましょう。
ファイルを作成して、statを確認します。
takk@deb9:~/tmp$ echo HELLO >a takk@deb9:~/tmp$ stat a File: a Size: 6 Blocks: 8 IO Block: 4096 通常ファイル Device: 801h/2049d Inode: 546991 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ takk) Gid: ( 1000/ takk) Access: 2018-06-19 20:14:55.910949317 +0900 Modify: 2018-06-19 20:14:55.910949317 +0900 Change: 2018-06-19 20:14:55.910949317 +0900 Birth: - takk@deb9:~/tmp$
各タイムスタンプは同一の時刻となっていますね。
次に、作成したファイルをcatします。
takk@deb9:~/tmp$ cat a HELLO takk@deb9:~/tmp$
以前の状態なら、これでファイルのアクセス時刻が更新されていました。
今回はどうでしょう。
takk@deb9:~/tmp$ stat a File: a Size: 6 Blocks: 8 IO Block: 4096 通常ファイル Device: 801h/2049d Inode: 546991 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ takk) Gid: ( 1000/ takk) Access: 2018-06-19 20:14:55.910949317 +0900 Modify: 2018-06-19 20:14:55.910949317 +0900 Change: 2018-06-19 20:14:55.910949317 +0900 Birth: - takk@deb9:~/tmp$
更新されませんでした。成功です。
確認できたので、元に戻して、リブートします。
takk@deb9:~$ sudo vi /etc/fstab
takk@deb9:~$ cat /etc/fstab 省略 UUID=省略 / ext4 errors=remount-ro 0 1 省略 takk@deb9:~$ reboot
次は、mountコマンドで、特定ディレクトリからのアクセスのみ、アクセス時刻を更新しないようにしてみます。
/mntディレクトリに、/dev/sda1をマウント。このとき、マウントオプションにnoatimeを指定します。
mount /dev/sda1 /mnt -o noatime
これで、/mntからファイルアクセスする場合は、アクセス時刻が更新されないようになりました。/(ルート)からファイルをアクセスする場合は従来のまま、アクセス時刻は更新されます。
それぞれ確認してみます。
まずは、/mntからのアクセス。
takk@deb9:/mnt/tmp$ echo HELLO >a takk@deb9:/mnt/tmp$ stat a File: a Size: 6 Blocks: 8 IO Block: 4096 通常ファイル Device: 801h/2049d Inode: 1189283 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ takk) Gid: ( 1000/ takk) Access: 2018-06-19 20:53:39.451000000 +0900 Modify: 2018-06-19 20:53:39.451000000 +0900 Change: 2018-06-19 20:53:39.451000000 +0900 Birth: - takk@deb9:/mnt/tmp$ cat a HELLO takk@deb9:/mnt/tmp$ stat a File: a Size: 6 Blocks: 8 IO Block: 4096 通常ファイル Device: 801h/2049d Inode: 1189283 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ takk) Gid: ( 1000/ takk) Access: 2018-06-19 20:53:39.451000000 +0900 Modify: 2018-06-19 20:53:39.451000000 +0900 Change: 2018-06-19 20:53:39.451000000 +0900 Birth: - takk@deb9:/mnt/tmp$
Accessの行は、更新されていませんね。
次は、同じファイルで、/tmpからのアクセス。
takk@deb9:/tmp$ stat a File: a Size: 6 Blocks: 8 IO Block: 4096 通常ファイル Device: 801h/2049d Inode: 1189283 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ takk) Gid: ( 1000/ takk) Access: 2018-06-19 20:53:39.451000000 +0900 Modify: 2018-06-19 20:53:39.451000000 +0900 Change: 2018-06-19 20:53:39.451000000 +0900 Birth: - takk@deb9:/tmp$
読み込んだ後、どうなるでしょう。
takk@deb9:/tmp$ cat a HELLO takk@deb9:/tmp$ stat a File: a Size: 6 Blocks: 8 IO Block: 4096 通常ファイル Device: 801h/2049d Inode: 1189283 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ takk) Gid: ( 1000/ takk) Access: 2018-06-19 20:55:02.507000000 +0900 Modify: 2018-06-19 20:53:39.451000000 +0900 Change: 2018-06-19 20:53:39.451000000 +0900 Birth: - takk@deb9:/tmp$
Accessの行が更新されました。
コメント