Linuxでディスクのパーティション、フォーマット、ラベリング、マウント、アンマウントの一連の処理をまとめておく。まず、dmesgでデバイス名を確認し、partedでパーティションを切り、mkfs.ext4でフォーマット、e2labelでパーティションに名前を付け、マウントする。読み込み専用でマウントする場合は、オプション-r、または--read-only、あるいは-o roを添える。新しいディスクのパーティションを切る場合は mklabel gpt から実行する。
% dmesg | tail # デバイス確認
% sudo parted /dev/sdc # 間違えないように注意
(parted) print # ディスクサイズやパーティションの確認、mountされていても可能
(parted) rm 1 # 既存パーティションがあり、削除したい場合は番号を指定して削除
(parted) mklabel gpt # 初期化
(parted) print free
(parted) mkpart primary ext4 0% 100% # ext4でなくてもとりあえずext4としておけば問題なし
(parted) unit MiB # MiB単位で表示
(parted) print
(parted) quit
% sudo mkfs.ext4 -m 0.01 /dev/sdc1 # ext4でフォーマット
% sudo e2label /dev/sdc1 data # パーティション名
% sudo e2label /dev/sdc1 # パーティション名の確認
% sudo mount -t ext4 /dev/sdc1 /mnt/usb3
% df -lhT
FAT32でフォーマットしたい場合はmkfs.vfatを利用する。
Bash
$ dmesg | less
$ sudo parted /dev/sda
(parted) print
(parted) rm 2
(parted) rm 1
(parted) mklabel msdos
(parted) print free
(parted) mkpart primary fat32 0% 100%
(parted) quit
$ sudo mkfs.vfat -F 32 -n FOO /dev/sda1
$ sudo mount -t vfat /dev/sda1 /mnt/usb3
$ df -lTh
アンマウントできない場合、ファイルを噛んでいるプロセスが残っている可能性があるので、lsofまたはfuser -muvで確認する。
Bash
$ sudo umount /mnt/usb2
umount: /mnt/usb2: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
$ sudo lsof /mnt/usb2
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 18622 root cwd DIR 8,33 4096 106299393 /mnt/usb2/data
su 19603 root cwd DIR 8,33 4096 106299393 /mnt/usb2/data
$ sudo fuser -muv /mnt/usb2
USER PID ACCESS COMMAND
/mnt/usb2: root 18622 ..c.. (root)bash
root 19603 ..c.. (root)su
コマンドe2fsckの使い方をよく使うオプション-fpcDvとともにまとめておく。
Bash
# umount /dev/sdc1
# nohup e2fsck -fpcDv /dev/sdc1 < /dev/null > e2fsck.stdout 2> e2fsck.stderr &
# ls -l
total 4
-rw-r--r-- 1 root root 0 May 23 18:07 e2fsck.stderr
-rw-r--r-- 1 root root 524 May 24 22:14 e2fsck.stdout
# cat e2fsck.stdout
free: Updating bad block inode.
11 inodes used (0.00%)
0 non-contiguous files (0.0%)
0 non-contiguous directories (0.0%)
# of inodes with ind/dind/tind blocks: 0/0/0
Extent depth histogram: 1
15377150 blocks used (1.57%)
0 bad blocks
1 large file
0 regular files
2 directories
0 character device files
0 block device files
0 fifos
0 links
0 symbolic links (0 fast symbolic links)
0 sockets
--------
2 files
オプション-fはとにかくファイルシステムのチェックを行う、-pは自動的に修正を行う(-nや-yとともに用いない)、-cはデバイス上の不良ブロックを探すbadblocksを実行する、-Dはディレクトリの最適化を行う、-vは詳細な情報を表示する。
UbuntuでexFATフォーマットされたディスクをマウントする。
$ dmesg | less # デバイスを確認
$ sudo mount -t exfat /dev/sdm1 /mnt/usb3
mount: unknown filesystem type 'exfat'
$ sudo apt-get install exfat-fuse exfat-utils
$ sudo mount /dev/sdm1 /mnt/usb3
FUSE exfat 1.2.3
$ df -lhT | grep fuse
/dev/sdm1 fuseblk 932G 584G 348G 63% /mnt/usb3
$ cat /etc/os-release # Ubuntu 16.04.3 LTS
ディスクの容量(バイト数)を確認
$ dmesg | tail
$ sudo parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit B
(parted) print
Error: /dev/sdb: unrecognised disk label
Model: ASMT 2115 (scsi)
Disk /dev/sdb: 1000204886016B
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
誰かがディスクを噛んでいてアンマウントできない場合
% sudo fuser -muv /mnt/usb3