日々ブログ

当サイトは、アフィリエイトプログラムにより商品をご紹介しています

【プログラミングのお話】linux で外付けメディアに書き込めなかった

pythonで外部メディアにファイルを書き込みした際、 書き込みした結果同じ名前のフォルダが出来上がっていた。
中身はどうやら片方は外部メディアでもう一方は、内部ディスクとして認識されている。

原因:マウント前に書き込み処理が走っている

原因としては、外部メディアをマウント完了する前に書き込み処理が行われているのが原因でした。 書き込み処理の一貫で、フォルダが無ければ作成する処理も入れていたのが仇となりました。 対応としては、メディアをマウントしてから処理を開始すれば問題ありません。

systemd なら下記のようにsystemdでmountするサービスを作ります。

[Unit]
Description=USB drive mount
After=local-fs.target

[Mount]
# USBドライブのUUIDを指定
What=UUID=xxxx-xxxx
Where=/mnt/usb
Type=vfat
Options=defaults,noatime,x-systemd.automount

このサービスのあとに、書き込み処理を行うようにsystemdに登録すれば大丈夫です。

After =#上のサービス名

面倒な場合は、書き込み開始の前に30秒くらい待ちましょう。
なお、製品開発の場合は、秒数で待つのはおすすめしないです。

余談:ファイル名が悪い件

そもそも、ファイル名にピリオドが含まれていて不格好ではあるんですが。
ちなみに、こうしたフォルダ名は内部的に別のUUIDでつけられたフォルダ名で運用されていることが多いので、そちらを指定するほうが無難です。
ls コマンドで確認できます。
今回のフォルダは、内部的には下記のようなフォルダ名でした。
「8badbcfa-3f80-4fa0-ba48-7cbe7abf809a」

外付けメディアを購入したまま指して、自動でつけられた名前なんですけどね。
こういうエラーの原因となるような慣習はやめてほしい。。。