積雲が映像制作したMV『RANGEFINDER』公開中
専門88IO

Linuxで外部ストレージに書き込みができない件について

専門

ここ数週間はレポートの提出やソフトウェアのレビュー等でWindowsを使っていました。

いざManjaro Linuxに戻ろうと思ったら、途中でファイルの書き込みができないことに気づきました。

いろいろ試した結果、解決したので備忘録として置いておきます。

スポンサーリンク

自環境のストレージ構成

現状では、WindowsとLinuxでファイルシステムの一部を共有しています。

ストレージ 用途 ファイルシステム
M.2 NVMe SSD 250GB Windows NTFS
SATA SSD 250GB Linux EXT4
SATA SSD 500GB ユーザーファイル NTFS

Linuxでは以下のフォルダを500GB SSDの方に作成し、シンボリックリンクを貼ってあります。

  • Desktop
  • Documents
  • Downloads
  • Music
  • Pictures
  • Public
  • Templates
  • Videos
スポンサーリンク

どこでエラーが起きたか

ダウンロードしたファイルをVimで編集して保存しようと思ったときに、「read-only file system」と警告され、書き込みができませんでした。

また、Shutterで撮ったスクリーンショットの保存場所をPictures内に変更しようとしたときも出来なかったんです。

これで、まず疑ったのはfstabです。

fstabによる自動マウント設定

以前はThunarから手動でマウントしていたのですが、面倒くさくなってきたので/etc/fstabに設定を追加していました。

UUID=7A10645D106421FD /mnt/D ntfs defaults,umask=000,dmask=027,fmask=137,uid=1000,gid=1000 0 0

この設定が間違っているのが原因で書き込みができないのでは、と最初は考えたのですが違いました。UUIDやマウントオプションは間違っていませんでした。

以下は設定方法です。

UUIDの確認方法

まず、自動マウントしたいストレージをファイルマネージャーでマウントします。ここではマウント位置を確認します。

次に、ファイルシステム名をdfコマンドで確認します。上で確認したマウント位置に対応するファイルシステム名を覚えます。

df -h

最後に、blkidコマンドでファイルシステム名に対応するUUIDを取得します。加えて、ext4やfat32といった形式も確認もできます。(コマンドに管理者権限が必要な場合があります。)

blkid

// 出力がない場合
sudo blkid

マウントオプションの設定方法

マウントするストレージのファイルに対する権限を設定します。

まずは、dmask, fmask, umaskです。

  • dmask … ディレクトリに対する権限
  • fmask … ファイルに対する権限
  • umask … 新規作成したファイル・ディレクトリに対する権限

といったイメージになります。

また、ファイル属性はlsコマンドで確認できます。

ls -l

番号が示すファイル権限は、2の累乗で

r(読み込み)
w(書き込み)
x(実行可能)

の和となります。

例えば、rwxr-xr-x755になります

しかし、fstabはこの3桁の数字を777から引いたものを記入します。(ややこしいですが…)

上のPOINTの場合は777 – 755 = 022になります
つまり、今回の設定ではdrwxr-x—, -rx-r—–です。
次に、giduid
名前の通りグループIDとユーザーIDです。
自分のIDはそのままidコマンドで確認できます。
id

再マウント時にエラーが!

fstabを編集後にストレージをアンマウントして、再マウントしてみました。

sudo umount /mnt/D/

sudo mount -a

しかし、ここで以下のエラーメッセージが表示されました。(起動時の自動マウントはエラー表示がされないので気づかなかった…)

The NTFS partition is in an unsafe state. Please resume and shutdown
Windows fully (no hibernation or fast restarting), or mount the volume。
read-only with the ‘ro’ mount option.

ただ、Windowsシステムはハイバーネートも高速起動も有効化していません。

詰みかけていたのですが、調べているとntfsfixという機能を見つけました。

NTFSFixですべて解決!

ntfsfixはNTFSシステムのエラーをチェックして自動で修正できる機能です。

注意として、引数にシステムファイル名を取ります。
※マウント場所ではありません。必ずアンマウント後に行ってください

sudo umount /mnt/D/

sudo ntfsfix /dev/sda1
Mounting volume… OK
Processing of $MFT and $MFTMirr completed successfully.
Checking the alternate boot sector… OK
NTFS volume version is 3.1.​_
NTFS partition /dev/sda1 was processed successfully.
上のコマンド実行後は書き込みもできるようになりました!

 


今回は遭遇した不具合とその解決方法について書きました。これからも時々書いていこうと思います。

コメント

タイトルとURLをコピーしました