風来坊@真幸福知

風来坊@真幸福知

始まりは坐禅会のご案内, 思いつくことを何でも書いていたら星空系に... Started with Zazen session info. now almost astrophotos. 시작이 참선회 안내, 이제 별하늘 사진들.

写真のSDカードをLinuxに挿したら時刻が9時間ずれる問題: 解決!

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のときと同じ感じになり, 時刻が治っているはず. ▷ボタンで再マウントできる.

f:id:cheonghongsa:20210324212722p:plain

 

ちなみに, 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: yes

Warning: 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をローカルタイムにする設定はあちこちで問題を起こす可能性があるのでやめなさいということらしい.

なので, やはり上のマウントオプションによる解決法となる.

参考

追記【重要】

SDXCを認識できる機器で使うのなら, 32GBのSDHCだってexFATファイルシステムにしてしまえばいいんじゃないの? とふと思ってやってみたら...

確かにカメラで撮影した画像が保存されたカードをLinuxに挿しても時刻のずれはおこらない.

したがって, スッキリする解決策は, "exFAT"でフォーマット!

追記2: UbuntuexFAT関係パッケージ

PCのUbuntu MATEを18.04LTSから20.04LTSにアップグレードしたら, 再び時刻がずれる問題が発生TT 調べてみたらUbuntuexFATに関連したパッケージがあって, exfat-utils exfat-fuse の2つをインストールしたら解決した.

<了>