先日、古いPCのHDD内に残っているデータをサルベージするために、Ubuntu Server にUSBケーブルでHDDをつないだところ、自動的にマウントしてくれなかったのでその時の覚書です。
・・というのも、その件でググって出てきたQiitaの内容があまりにひどい内容だったので、それに対する丁寧な説明として書き残します。
検証した Ubuntu Server の環境
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS"
$ uname -a
Linux xxxx 5.4.0-86-generic #97-Ubuntu SMP Fri Sep 17 19:19:40 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
fdisk コマンドで USB デバイスを特定する
sudo fdisk -l
ずらずらと出てくるので、該当するデバイスを特定します。
以下はその抜粋ですが、/dev/sda は、Ubuntu Server 本体側のストレージで、/dev/sdb が、今回 USB ケーブルで接続しているハードディスクです。
数多くのストレージがマウントされている場合は、容量やストレージの型式などから推測する必要があるかも知れません。
:
:
Disk /dev/sda: 557.77 GiB, 598879502336 bytes, 1169686528 sectors
Disk model: PERC 6/i Adapter
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: gpt
Disk identifier: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Device Start End Sectors Size Type
/dev/sda1 2048 1050623 1048576 512M EFI System
/dev/sda2 1050624 3147775 2097152 1G Linux filesystem
/dev/sda3 3147776 1169684479 1166536704 556.3G Linux filesystem
:
:
Disk /dev/sdb: 37.27 GiB, 40007761920 bytes, 78140160 sectors
Disk model: MHT2040AH
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: xxxxxxxxxx
Device Boot Start End Sectors Size Id Type
/dev/sdb1 63 128519 128457 62.7M de Dell Utility
/dev/sdb2 * 128520 39664484 39535965 18.9G 7 HPFS/NTFS/exFAT
/dev/sdb4 39664485 78140159 38475675 18.4G f W95 Ext'd (LBA)
/dev/sdb5 39664548 40451669 787122 384.3M b W95 FAT32
/dev/sdb6 40451736 78140159 37688424 18G 7 HPFS/NTFS/exFAT
この例で言えば、
Disk /dev/sdb: 37.27 GiB, 40007761920 bytes, 78140160 sectors
Disk model: MHT2040AH
や、Disklabel type
が gpt
1 や dos
2 等の表記で推測できました。
USBメモリ・ストレージをマウントする
マウントポイントの作成
USBメモリをマウントする、マウントポイントを作成します。
マウントポイントは、/media
直下に作成します。
sudo mkdir /media/external
マウントする
今回は、Windows の Cドライブにあたる /dev/sdb2
をマウントしました。
sudo mount -t ntfs /dev/sdb2 /media/external -o uid=1000,gid=1000,utf8
上記のコマンドでは、オプションでファイルやディレクトリのオーナー(uid
)とグループ(gid
)を 1000(現在のユーザーのUID、GID) にしています。
また、utf8
は、ファイル名を変換する時に UTF-8 に変換するように指示しています。
ちなみに私の環境では、上記では次のようなエラーが出ました。
Windows is hibernated, refused to mount.
Falling back to read-only mount because the NTFS partition is in an
unsafe state. Please resume and shutdown Windows fully (no hibernation
or fast restarting.)
Could not mount read-write, trying read-only
どうやら、このディスクは Windows が休止状態のまま取り出したディスクみたいで、そのまま(読み書き用)ではマウントできないみたいですね。3
なので以下のように、読み取り専用でマウントしました。
sudo mount -t ntfs /dev/sdb2 /media/external -o ro,uid=1000,gid=1000,utf8
また、ディスクタイプが vfat な場合は、次のようにします。
sudo mount -t vfat /dev/sdb1 /media/external -o uid=1000,gid=1000,utf8,dmask=027,fmask=137
mount オプションの umask、dmask、fmask
ここで、dmask=027,fmask=137
ってなんぞや?
と思ったので調べてみました。
通常の chmod
などで扱うファイルパーミッションとは少し見え方が違いますが、考え方は簡単でした。
それぞれ通常の8進数として扱われますが、単純に7を引いただけ なのです。
例えば、すべてのユーザーが読み書き実行を可能にしたい場合、chmod
コマンドでは、777
になると思いますが、ここからそれぞれの桁から7を差し引いた値で、umask
等を設定すれば、読み書き実行が可能な状態でマウントされるということになります。
よって、dmask=027,fmask=137
は逆に考えれば、
ディレクトリは、027
は 750
で、オーナーは読み書き実行可(= ディレクトリを開ける)、グループは読み取りと実行が可能、他は全て不可、
137
は 640
で、オーナーは読み書き可、グループは読み取り可、他はすべて不可、
という意味になります。
まとめ
Qiita には、有用な情報もありますが、結構いい加減な情報もおおいので、複数のソースにあたって必ず検証しよう、というお話でした4。
0件のコメント