見出し画像

USBメモリーがまさかのWindowsで地獄に道連れ(Arch Linux使いへの道8)

USBが認識した!その後にやることは?

 前回でもともと使用環境が整っていたのに、コパイロット先生の指示で迷走していたUSBメモリー問題ですが、とりあえずUSBに挿して正常認識するところまでいきました。そこからは前回当初に先生にご教示いただいていた工程のとおり進めます。
1 パーティションの確認
 lsblkコマンドを実行します。現在使っている記録装置すべて(専門用語でブロックデバイスというらしいです)のパーティションの状況がわかります。ここから、自分が使っているUSBメモリーは「sda1」というドライブになっているようです。「sd『a』」のaの部分は環境に依存して(具体的にはUSBコネクタに挿入した順番で)bやcになるようです。
2 ファイルシステムの確認
 sda1について、blkidコマンドを使います。このコマンドはブロックデバイス(凄腕っぽく早速専門用語を使ってみる)の状態を調べるもので、デバイスを指定して調べることもできます。

sudo blkid /dev/sda1

 このコマンドの結果には、「UUID=」としてイコールの先に文字列が書かれている記述が含まれています。このUUIDはこのUSBメモリーの固有識別番号になるようです。更にファイルシステムも記述されています。今回のUSBメモリーはexFAT形式でした。この形式はマイクロソフトが開発したファイルシステムであり、Arch Linuxで使うにはひと手間加える必要があるみたいです・・・。
3 Arch LinuxがexFAT形式のファイルシステムを読書きできるようにする
exfatprogsというパッケージの導入が必要です。パッケージ導入といえばpacman or yay!このパッケージはArch Linuxお墨付きなのでpacmanで導入します。

sudo pacman -S exfatprogs

4 USBメモリーを「usb」というフォルダとして扱う
mountコマンドを使ってやります。このコマンドは、デバイスやファイルシステムを特定のフォルダ(マウントポイント)に関連付ける操作を行うもので、この操作により、デバイスの内容をそのディレクトリを通じてアクセス可能にするそうです。
 その前に、usbというディレクトリを作ります。正確には/mnt/usbかな。これがマウントポイントというものになります。

sudo mkdir -p /mnt/usb

 で、そこにUSBメモリーを関連付けます

sudo mount /dev/sda1 /mnt/usb

 これでCUI上では「/mnt/usb」というフォルダが挿入しているUSBメモリーの中身そのものになりました。

パーミッション問題に遭遇

 USBメモリーの準備が整い、早速先日のスクリーンショットファイルをコピーします。ファイルコピーのコマンドはcpです。

cp ~/test.png /mnt/usb/

 これで万事OK・・・かと思いきや簡単にいかないのがこの悪戦苦闘記録でして・・・。コピーコマンドが許可されていない(パーミッションエラー)と出ました(涙)。スーパーユーザーとしてコマンドをなんでも実行できる「sudo」から初めてもよいのですが、折角なのでこのような状況になった構造を調査してみました。
 コパイロット先生によると、まずはマウントポイントのフォルダの使用権原がスーパーユーザーのみならず一般ユーザーにも許可されているかを確認せよとのことでした。結果は問題なし。しっかり許可されてました。さらにUSBメモリーそのものが書き込み禁止になっていないかも調べろとのこと。USBメモリーとマウントポイント(フォルダ)を関連付けるmountコマンドは、単独で使うとマウントしているデバイスの状態を出力するらしく、その出力から/mnt/usbに関係する記述だけを抽出するコマンドを入力します。

mount | grep /mnt/usb

 そのコマンドの結果の一部がこちら

exfat (rw,relatime,fmask=0022,dmask=0022

 この結果は、exFAT形式のUSBメモリーが「読み書き可能(rw)だけど、fmask(メモリー上のファイルへの許可付与状況)とdmask(メモリー上のディレクトリ(フォルダ)への許可付与状況)の設定値により一般ユーザーは書き込み禁止と設定されている」という意味らしいです。より専門性の高い解説はこのページがわかりやすいです(umaskを解説していますが、fmask・dmaskと数字は同じ意味です)。
 これを是正するためには次のとおりコマンドを打てばよいそうです。

sudo umount /mnt/usb   :一度USBメモリーをアンマウントする
 
sudo mount -o uid=$USER,gid=$USER,fmask=0000,dmask=0000 /dev/sda1 /mnt/usb
 :一般ユーザーを読み書きOKにして(2つのマスクの下1桁がゼロ)USBメモリーをマウントする

 これでスクショファイルのコピーコマンドをスーパーユーザーではなくても受け付けるようになりました!やったぜ!!そしてUSBメモリーの取り出しは次のコマンドを打つとのこと。

sync    :PCのメインメモリに残っている、各種デバイスへの作業命令を実行するコマンド
sudo umount /mnt/usb

今後も同じUSBメモリーを使う場合の自動設定ーfstab

 いろいろ苦労してUSBメモリーを使えるようになりましたが、毎回毎回こんな苦労したくはないッ!ということで、コパイロット先生に2回目以降のUSBメモリーの使い方を聞いたら教えてくれたのは、etcフォルダに保存されているfstabという環境設定ファイル(/etc/fstab)を弄ること。このファイルをテキストエディタで開いて次の1行を追加するだけ。UUIDは冒頭で調べたUSBメモリーの固有識別番号を入力すればOK!

UUID=XXXX-XXXX  /mnt/usb  exfat  rw,uid=1000,gid=1000,fmask=0000,dmask=0000,noauto  0  0

 この記述の意味は、/mnt/usbをマウントポイントとしたexFATのファイルシステムの読み書き可能(rw)なUSBメモリー(UUIDが特定のもの)を一般ユーザー(uidとgidが1000)が、ファイルもフォルダも一般ユーザーが弄れる状態(fmask、dmaskが0000)で、毎回mntコマンドを入力する方法(noauto)で使うから夜露死苦!ということらしいです。最後の2つのゼロは意味はある(システム的に行われる作業を2つオフにしている)のですが、今は必ずこうしておけばよいというものらしいです。
 このように設定しておけば、次回からはUSBメモリー挿す、sudo mount /mnt/usb で使用し、sudo umount /mnt/usbで取り外せるようになるようです。スーパーユーザーじゃなくても(sudoを書かなくても)いける設定もあるのですが、勉強のために残しておきました。

第2回で地獄から抜け出せたよな?あれは嘘だ

 ようやくCUI環境で撮ったスクリーンショットのファイルをUSBメモリーにコピーすることができました。ここまで長ぇ・・・。さあWindowsマシンにつないでこのnoteにアップしよう・・・・あれ?USBメモリーを挿して、「ポキョン」というUSB入った!って音もしているのに、エクスプローラーでUSBメモリーのドライブが出てこない・・・。
 なぜ・・・慢心、環境の違い?
 そういえば、このUSBメモリーは、ThinkPadのSSDのパーティション割りしようとしたとき、SSDと間違えてパーティション割って一度壊したUSBメモリーだったっけ・・・(第2回の記事参照)。
 コパイロット先生に泣きながら相談すると、「ポキョン」と音が出るならば電気的接続は成功しているがドライブとして認識されていないとのこと。先生からは「Windowsキー+X」から「ディスクの管理」を起動し、USBがどのように表示されているかと逆質問されました。そこから先生の言いつけを従順に守って質問に答えたら、「Windows がドライブレター(C:とかD:とか)を自動割り当てできていないだけ。手動でドライブレターを付ければ認識される可能性が高い。」との診断が!さっすが先生!「ドライブ文字とパスの変更」を実行してようやくドライブとして認識されました!

これが成果や!証拠や!!たったこれだけとか言わないでorz

今回わかったこと
・ 昔の失敗はいつまでも引き摺る。呪いは簡単に解けない。

いいなと思ったら応援しよう!