Category Archives: 8-1 日付時間

Linuxでatime(アクセス時刻)の更新設定

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を編集して、の位置に、カンマ区切りで、noatimeを追加してみましょう。

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の行が更新されました。