馬鹿の一つ覚え: ディスクのフォーマット

#### Linuxでディスクのパーティション、フォーマット、ラベリング、マウント、アンマウントの一連の処理をまとめておく。まず、dmesgでデバイス名を確認し、partedでパーティションを切り、mkfs.ext4でフォーマット、e2labelでパーティションに名前を付け、マウントする。読み込み専用でマウントする場合は、オプション-r、または--read-only、あるいは-o roを添える。新しいディスクのパーティションを切る場合は mklabel gpt から実行する。
```terminal
% 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を利用する。
```lang: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で確認する。
```lang: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とともにまとめておく。
```lang: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
```

#### ディスクの容量(バイト数)を確認
```shell-session
$ 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:
```

#### 誰かがディスクを噛んでいてアンマウントできない場合

```shell-session
% sudo fuser -muv /mnt/usb3
```