どの段階で止まっているかを先に確かめる
「USBメモリが使えない」という症状でも、止まっている段階は人によって違います。段階は大きく4つあります。1つ目はカーネル(Linuxの中核部分)がデバイスを検出していない段階です。2つ目は、デバイスは見えているのにマウント(ファイルシステムをディレクトリにつないで読み書きできるようにする操作)ができない段階です。3つ目は、マウントできても読み取り専用になる段階です。4つ目は、マウントはできているのに権限の問題で書き込めない、または自動で開かない段階です。
この記事では、可能性が高く手間の少ない確認から順に進めます。各節の最後に、次にどこへ進むかを書いています。
ケーブル・ポート・給電を確認する
最初に物理的な接続を確かめます。原因として多く、確認も簡単だからです。
まず別のUSBポートに挿し直します。USBハブを使っている場合は外し、PC本体のポートに直接つなぎます。デスクトップPCなら、前面より背面のポートのほうが安定することがあります。前面ポートは内部の延長ケーブルを経由しているためです。
ケーブルも疑います。外付けドライブに付属していない市販ケーブルの中には、充電専用でデータ線を持たないものがあります。この場合、ドライブのランプは点いてもPCからは見えません。
給電不足もよくある原因です。バスパワー(USBポートからの電力で動く方式)の2.5インチHDDは、ポートの供給電力が足りないと回転が安定しません。「カチッ」という音を繰り返す場合はこれを疑います。3.5インチHDDは通常ACアダプタが必要なので、電源が入っているかを確認します。
可能なら別のPCに接続します。別のPCでも認識されなければ、ドライブ側かケーブル側の問題である可能性が高くなります。物理的な問題が見当たらなければ、次の節でカーネルの認識を確かめます。
lsblkとdmesgでカーネルの認識を確かめる
lsblkでブロックデバイスの一覧を見る
lsblkは、ディスクやパーティションなどのブロックデバイスを一覧表示するコマンドです。ドライブを挿す前と後で実行し、増えた行を探します。
lsblk -f新しくsdbやsdcのような行が現れれば、カーネルは認識しています。この場合は「ファイルシステムの種類を確認する」の節へ進みます。行が増えなければ、次のカーネルログを確認します。
dmesgまたはjournalctl -kでカーネルログを見る
カーネルログには、USB機器を挿したときの検出結果が記録されます。次のどちらかを実行した状態でドライブを挿すと、出てくるメッセージをその場で確認できます。
sudo dmesg -w
journalctl -kfjournalctlはsystemdを採用したディストリビューションで使えます。どちらも内容はほぼ同じです。終了するときはCtrl+Cを押します。
表示されるメッセージ別に、次の行動を整理します。
| ログの状態 | 考えられる原因 | 次の行動 |
|---|---|---|
| 何も表示されない | ポート、ケーブル、ドライブ本体の故障 | 物理的な確認に戻り、別のPCで試す |
device descriptor read/64, error -71などのエラーが出る | 給電不足、ケーブル不良、接触不良 | 別ポート、別ケーブル、セルフパワーのハブを試す |
[sdb] Attached SCSI diskまで出る | カーネルは認識している | ファイルシステムの確認へ進む |
I/O errorやBuffer I/O errorが繰り返し出る | ドライブの物理的な劣化 | 書き込みを止め、データ救出を優先する |
USB機器としては見えているか確かめたい場合は、lsusbも使えます。usbutilsパッケージに含まれています。lsusbに機器が表示されるのにlsblkに出ない場合は、ドライブ内部の故障か、USB変換チップの不具合が考えられます。
I/Oエラーが出る場合は、smartmontoolsのsmartctlでドライブの健康状態を確認できます。USB接続では、変換チップによって情報が取れないことがあります。その場合はsudo smartctl -a -d sat /dev/sdbのように-d satを付けると取得できる場合があります。
ファイルシステムの種類を確認する
カーネルがドライブを認識していても、ファイルシステムを扱えなければマウントできません。lsblk -fのFSTYPE列で種類を確認します。
exFATの場合
exFATは、大容量のUSBメモリやSDカードで多く使われる形式です。比較的新しいカーネルは、exFATのドライバを標準で備えています。unknown filesystem type 'exfat'と表示される場合は、古いカーネルを使っているか、ドライバが組み込まれていない可能性があります。修復用のツールはexfatprogsというパッケージに含まれています。パッケージ名はディストリビューションによって異なることがあります。
NTFSの場合
NTFSはWindowsで標準的に使われる形式です。Linuxでは、FUSE(ユーザー空間でファイルシステムを動かす仕組み)を使うntfs-3gか、カーネル内蔵のntfs3ドライバで扱います。どちらが使われるかは、ディストリビューションと設定によって変わります。マウントできない場合は、まずntfs-3gパッケージが入っているかを確認します。
FSTYPEが空欄や見慣れない値の場合
FSTYPEがBitLockerなら、Windowsで暗号化されたドライブです。Linuxで開くには、cryptsetupやdislockerなどで別途ロックを解除する必要があります。MacでフォーマットしたAPFSのドライブは、Linuxの標準カーネルでは扱えません。FSTYPEが空欄の場合は、パーティションが壊れているか未フォーマットの可能性があります。データが必要なら、ここでフォーマットしてはいけません。
手動でマウントを試す
エラーメッセージを確認するために、手動でマウントします。/dev/sdb1の部分はlsblkで確認した名前に置き換えます。
sudo mkdir -p /mnt/usb
sudo mount /dev/sdb1 /mnt/usb失敗した場合は、表示されたメッセージとdmesgの末尾を合わせて読むと原因が絞れます。マウントはできたのに書き込めない場合は、次の節へ進みます。
読み取り専用になる原因を確かめる
Windowsの高速スタートアップ
WindowsとデュアルブートしているPCや、Windowsで使った外付けドライブで多い原因です。Windowsの高速スタートアップは、シャットダウン時にシステムの状態をディスクに保存します。このためNTFSが「使用中」の状態のまま残ります。ntfs-3gは、この状態のドライブに対してWindows is hibernated, refused to mountやunclean file systemといったメッセージを出します。ドライバによっては、マウントを拒否するか読み取り専用でマウントします。
対処はWindows側で行います。Shiftキーを押しながらシャットダウンを選ぶと、完全なシャットダウンになります。恒久的に避けたい場合は、コントロールパネルの電源オプションで高速スタートアップを無効にします。ntfsfixなどでLinux側から強制的に状態を消す方法もありますが、Windowsが保存したデータを失うおそれがあります。外付けドライブであれば、Windowsにつないで「安全な取り外し」をしてから抜くのが確実です。
エラー検出による読み取り専用化
カーネルはファイルシステムの異常を検出すると、データを守るために読み取り専用で再マウントすることがあります。dmesgにremounting filesystem read-onlyと出ていれば、これに該当します。アンマウントしてから、ext4ならfsck.ext4、exFATならfsck.exfatで検査します。I/Oエラーが同時に出ている場合は、修復より先にデータのバックアップを取ります。
SDカードやUSBメモリの一部には、物理的な書き込み禁止スイッチがあります。これも確認しておきます。
権限と自動マウントの問題を確かめる
ext4のドライブに書き込めない
ext4はLinuxのファイル所有者の情報を保存します。別のPCで作ったドライブは、所有者のユーザーIDが今のユーザーと一致しないことがあります。この場合はsudo chown -R $USER: /mnt/usbのように、所有者を自分に変更します。
FAT・exFAT・NTFSに書き込めない
これらの形式はLinuxの所有者情報を持ちません。所有者はマウント時のオプションで決まります。sudoで手動マウントすると、root以外が書き込めない状態になることがあります。sudo mount -o uid=$(id -u),gid=$(id -g) /dev/sdb1 /mnt/usbのように、自分のユーザーIDを指定してマウントし直します。
自動でマウントされない
デスクトップ環境の自動マウントは、多くの場合udisks2が担っています。ファイルマネージャーに表示されない場合は、次のコマンドでudisks2経由のマウントを試します。
udisksctl mount -b /dev/sdb1これで成功するなら、ドライブ自体に問題はありません。ファイルマネージャーやデスクトップ環境の設定を確認します。なお、サーバー向けや最小構成のインストールでは、自動マウントの仕組みが最初から入っていないことがあります。この場合は手動マウントが通常の動作です。常に同じドライブを使うなら、/etc/fstabにUUIDで登録します。外付けドライブを登録するときはnofailオプションを付けます。付けないと、ドライブを外したまま起動したときに起動が止まることがあります。
ここまでで直らないときの判断基準
次に取る行動は、dmesgの内容で決まります。I/Oエラーが出ているなら、ドライブの故障を前提にします。修復を試すより先に、書き込みを止めます。重要なデータがある場合は、GNU ddrescueでディスクイメージを取ってから作業するか、データ復旧業者に相談します。
エラーが出ていないのにマウントできない場合は、別のOSで読めるかを確かめます。Windowsで読めるならLinux側のドライバか設定の問題、どこでも読めないならドライブ側の問題と切り分けられます。フォーラムなどで質問するときは、lsblk -fの出力、ドライブを挿した直後のdmesg、mountのエラーメッセージを添えます。この3つがあれば、どの段階で止まっているかを回答者が判断できます。