SDカードのファイルの時刻が9時間ずれる
Fujifilmのミラーレスを使い始めてから, そこで使っているSDカードをPCに挿すとファイルの時刻が9時間ずれてしまうという問題が起こっていた.
SDカードでもこの問題が起こるものと起こらないものがある. Samsungの64GB Evoなんとかというやつは起こらない, 一方SanDiskのExtreme 32GBというのだと起こる.
カメラかSDカードに問題があるのかと思って長らくそのまま我慢して使っていたのだが, この問題はWindowsでは起こらないらしくLinuxに挿すときに起こるという情報を目にした.
分かったこと(たぶん)
LinuxではPC内蔵のハードウェアクロックであるRTC(real time clock)をUTC(世界標準時)にするのが普通らしく, またSDカードのFAT32ファイルシステムではタイムゾーンの情報がないために, 日本時間(JST=UTC+9h)で記録された時刻をLinuxで見ると, UTCで解釈されて9時間後の時刻になる. ということらしい.
Windowsではこうはならない. (UTCを使ってないのかな?)
また, 問題が起こるSDカードは32GB(SDHC), 問題のないSDカードは64GB(SDXC)だったのだが, この違いはファイルシステムが各々FAT32, exFATであるためと思われる. FAT32から拡張されたexFATではUTCがサポートされているとのことで, このために64GBのでは問題が起こらなかったのだろう.
ケチらないで64GBのSDXCを買えばLinuxにもなじむということになる.
すでに持ってる32GBのSDHCは, 以下のように解決できた.
解決策
→「追記」のところに究極の解決法あり, たいていの場合そっちが良さそう.
Linuxでの解決策は, マウントオプションで時刻のオフセットを設定すること. Ubuntu系の場合は, "Control center"からアクセスできるシステムツールの"Disks"を使ってSDカードのマウントオプションを設定できる. (このツール便利でSDカードのフォーマットもできる)
手順は以下のように...
- 問題のSDカードをLinux PCに挿す
- "Control center"の"Hardware"セクションの"Disk"を起動
- マウントされているSDカードを選択し, その中の大きいパーティションを選択する(写真ファイルが入っているところ)
- その下にある□ボタンを押してパーティションをアンマウント(オプションをいじる時マウントされたままだとNG)
- 歯車アイコンを押して出るメニューで"Edit mount options"を選択, ウィンドウが出る
- たぶん"User Session Defaults"がONになっているのでこれをOFFにする
- 以下のように設定
- "nosuid,nodev,..."など書いてあるところがマウントオプションで, そこに"time_offset=540"を追加.(540min=9h)
- これだけだとマウントしたときにdisk所有者がrootになってファイル書き込みや削除ができないので, "uid=<user名>,gid=<group名>"も追加
- Mount Point: /media/<user名>/disk1
- Identify As: 選択肢の中で"/dev/mmc...."みたいなのを選ぶ
これでたぶん挙動はUser Session Defaultsのときと同じ感じになり, 時刻が治っているはず. ▷ボタンで再マウントできる.
ちなみに, timedatectlコマンドを使ってRTCをローカルタイムに設定するという解決法が書かれたブログもあった.
$ sudo timedatectl set-local-rtc yes
これで確かに, SDカードを挿した時にファイルの時刻は正しく表示される.
ところが, 設定を確認してみると...
$ timedatectl
Local time: Wed 2021-03-24 21:32:20 JST
Universal time: Wed 2021-03-24 12:32:20 UTC
RTC time: Wed 2021-03-24 21:32:20
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
systemd-timesyncd.service active: yes
RTC in local TZ: yesWarning: The system is configured to read the RTC time in the local time zone.
This mode can not be fully supported. It will create various problems with time zone changes and daylight saving time adjustments. The RTC time is never updated, it relies on external facilities to maintain it.
If at all possible, use RTC in UTC by calling'timedatectl set-local-rtc 0'.
のように警告が出て, つまりRTCをローカルタイムにする設定はあちこちで問題を起こす可能性があるのでやめなさいということらしい.
なので, やはり上のマウントオプションによる解決法となる.
参考
- SanDiskサポート: SD/SDHC/SDXCカードの仕様と互換性
- exFATファイルシステムのしくみと操作法
- Windowsで普通に使ってたデジカメ用メモリーカードをLinux(Ubuntu)でも使おうとしたらファイルのタイムスタンプが9時間進んでいた件 : とっててよかった備忘録
追記【重要】
SDXCを認識できる機器で使うのなら, 32GBのSDHCだってexFATのファイルシステムにしてしまえばいいんじゃないの? とふと思ってやってみたら...
確かにカメラで撮影した画像が保存されたカードをLinuxに挿しても時刻のずれはおこらない.
したがって, スッキリする解決策は, "exFAT"でフォーマット!
追記2: UbuntuのexFAT関係パッケージ
PCのUbuntu MATEを18.04LTSから20.04LTSにアップグレードしたら, 再び時刻がずれる問題が発生TT 調べてみたらUbuntuでexFATに関連したパッケージがあって, exfat-utils exfat-fuse の2つをインストールしたら解決した.
<了>