NTFSの外付けHDDをLinuxでマウントする時に気をつけなければならないこと

通常Linuxで外部HDDをマウントした場合、ファイルの所有者やファイルのアクセス権限を変更したりする必要があるなら、HDDは、問題なく必要に応じて変更が出来るExt4でフォーマットするのが最良です。
しかし、Windowsで使っているNTFSでフォーマットされたHDDをマウントする必要がある場合は注意が必要です。マウントした後は、ファイルはマウント時の所有者から変更が出来ません。ファイルのアクセス制限も後から変更は出来ません。
つまり、マウント後はファイルをchmod やchownで変更出来ないのです。
NTFSシステムではその情報を保持する場所が無いので、コマンドを打って変えようすると、エラーも出ずに何事もなく完了する。でも確認してみると変更されていないのである。
つい、やったつもりで先に進んでしまうとそれに気がつくまで時間がかかり、後で痛い目に合うということが多いので注意しましょう!!

実際のNTFSのマウント指示の方法

実際、mountコマンドをそのたびに打ってmountすることは少なくて起動時にmountすることのほうが圧倒的に多い。その場合は、マウントをfstabに書き込んで自動起動させましょう。
fatabは環境によって場所は違うのかもしれないが私の環境では /etc にあったので開くと

<例>

~$ sudo nano /etc/fstab

proc                 /proc          proc    defaults 0 0
PARTUUID=ea92b713-01 /boot/firmware vfat    defaults 0 2
PARTUUID=ea92b713-02 /              ext4    defaults,noatime 0 1

この例の様に表示されます。後でマウントの書き方は説明をしますが、この記述の最後に追加記述することになります。
ここでは何もせずいったん閉じておきましょう。

コマンドでLinux上のHDDの認識を調べる

sudo fdisk -l コマンドで現在接続されているディスクの状況を確認します

~ $ sudo fdisk -l

...省略...

Disk /dev/sda: 465.76 GiB, 500107862016 bytes, 976773168 sectors
Disk model: DT01ACA050
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe38dbb85

Device     Boot     Start       End   Sectors   Size Id Type
/dev/sda1            2048 755277823 755275776 360.1G  7 HPFS/NTFS/exFAT
/dev/sda2       755277824 976769023 221491200 105.6G  7 HPFS/NTFS/exFAT

上記の結果からHDDは /dev/sda として認識されていて、その内部は sda1と sda2 の2つのNTFSファイルシステムがあることがわかります。ひとつしか作っていなければ /dev/sda1だけの表示です。

UUIDでマウントする場合

ハードディスクのUUIDを lsblk で確認します。

~ $ sudo lsblk -f
NAME        FSTYPE FSVER LABEL      UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sda
 sda1      ntfs         HDD        B88A62D38A628E26                        360G     0% /media/hdd1
 mqsda2      ntfs         ボリューム D63CABFB3CABD531                       55.9G    47% /mnt/samba/hdd
mmcblk0
 tqmmcblk0p1 vfat   FAT32 bootfs     EF6E-C078                             436.4M    14% /boot/firmware
 mqmmcblk0p2 ext4   1.0   rootfs     4aa56689-dcb4-4759-90e6-179beae559ac   19.6G    25% /


sda1を /mnt/hdd にマウントしたいなら USSID=B88A62D38A628E26をマウントする記述として/etc/fstabに以下のように追加記述します。

~$ sudo nano /etc/fstab

proc                 /proc          proc    defaults 0 0
PARTUUID=ea92b713-01 /boot/firmware vfat    defaults 0 2
PARTUUID=ea92b713-02 /              ext4    defaults,noatime 0 1
USSID=B88A62D38A628E26 /mnt/hdd auto nofail,uid=33,gid=33,umask=007 0 2

最後の行の説明を簡単に説明しますと
<マウント元USSID><マウント先><ファイルシステムの種類><オプション><dump><pass>
となっています。

<ファイルシステムの種類>
上記の場合ファイルシステムは NTFSなので [ntfs-3g] と書いても良いが [auto] と書けばどのファイルシステムかをマウントに自動で推測してもらえて便利です。
<オプション>
オプションは複数をカンマで区切って記述。nofailはもしも記述に問題があった場合読み飛ばしてくれる便利なオプション!!(必須ですね!!)
※以下重要 uidgidumaskは、先に述べた「NTFSのHDDをマウントした場合は、マウント後はファイルのアクセス制限とファイルの所有者情報はマウント時の所有者から変更出来ない。」ということなので、ここで予め設定します。
ここではapacheのホルダにするためのマウントだったのでオーナーはwww-dataにしてます。
uid,gidを調べるには
~ $ id www-data
で、自分の環境ではwww-dataは33でした。目的のオーナーのidを調べて入れて下さい。
umask=007は通常のマウントではファイルアクセスは777→770にするためマスクして007とした。

<dump>
dumpコマンドによるバックアップ対象にするかを決める。1か0を設定できる。
1ならバックアップ対象、0ならdumpの対象外
<pass>
起動時にfsckがチェックする順番。0,1または2を設定できる。
0のファイルシステムはチェックしない。
1はチェックの優先度が一番高いもの、ルートファイルシステム(/)は必ず1。
2はその他のファイルシステムのときに入れる。

UUIDを使わないでマウントする場合の書き方

個人的には判りやすくUUIDを調べなくて良いのでこちらが好きです。

~$ sudo nano /etc/fstab

proc                 /proc          proc    defaults 0 0
PARTUUID=ea92b713-01 /boot/firmware vfat    defaults 0 2
PARTUUID=ea92b713-02 /              ext4    defaults,noatime 0 1
/dev/sda1 /mnt/hdd auto nofail,uid=33,gid=33,umask=007 0 2

関連記事

前回作成したUDP通信コンポーネントでチャットソフトを作ってみる

C# Windowsショートカットをキーボード入力ではなくボタンのクリックで送る方法

DSO-TC3を買ってみた!!

LinuxでUSB接続のストレージをsambaで共有する

ホスト名(ドメイン)からIPアドレスを取得する方法 覚書

sqlite-net-pclを使ってみた