まとめ
msdos 形式でパーティション作成 (R-Car M3 等)
$ sudo parted /dev/sdc mklabel msdos
$ sudo parted /dev/sdc mkpart primary 0% 100%
gpt でパーティション作成 (今時の方法)
$ sudo parted /dev/sdc mklabel gpt
$ sudo parted /dev/sdc mkpart hoge 0% 100%
フォーマット
$ sudo mkfs.ext4 /dev/sdc1
解説
今まで fdisk で何となく生きてこれたがちゃんと parted について調べた。やりたいことは単純で、SD カードを初期化して全部 ext4 にしたい。
まず、SD カードデバイスの確認には私は lsblk を使っている。この例だとたまたま3つのパーティションが出来ているが、これを全部消して ext4 全部にしたい。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdc 8:32 1 15G 0 disk
├─sdc2 8:34 1 1.5G 0 part
├─sdc3 8:35 1 44M 0 part
└─sdc1 8:33 1 23.3M 0 part
parted にはコマンドラインから操作する command line と一旦 parted の中に入って操作する interactive の2つのモードがあるが、ここでは command line だけを使う。たとえば、
parted /dev/sdc print
で /dev/sdc にある SD カードのパーティションを表示する。command line でもかなり色んな質問をして来るが、無視したい場合は --script オプションで質問を無視する事も出来る。
$ sudo parted /dev/sdc print
Warning: Not all of the space available to /dev/sdc appears to be used, you can fix the GPT to use all of the space (an extra
28113994 blocks) or continue with the current setting?
Fix/Ignore? I
Model: TS-RDF5 SD Transcend (scsi)
Disk /dev/sdc: 16.1GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 25.4MB 24.4MB fat16 primary legacy_boot
2 26.2MB 1648MB 1622MB ext4 primary
3 1648MB 1694MB 46.1MB linux-swap(v1) primary
パーティションテーブルを作り直すには mklabel を使う。
mklabel label-type
label-type としては古い msdos と新しい gpt がある。
$ sudo parted /dev/sdc mklabel gpt
Warning: The existing disk label on /dev/sdc will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Y
Information: You may need to update /etc/fstab.
パーティションの作成には mkpart を使う。
mkpart [part-type fs-type name] start end
mklabel で msdos を指定すると part-type (primary | extended) が必須になる。mklabel で gpt を指定すると name が必須となる。start と end の単位として セクタやバイト数など色々使える。ただ、% 以外を使うと The resulting partition is not properly aligned for best performance.
という警告が出る事があって使いづらい。
ディスク全域を使うには以下のようにする。gpt の場合 name が必須らしいので適当に hoge と入れた。ここで fs-type の指定も出来るが、フォーマットは後で行うので省略して良い。
$ sudo parted /dev/sdc mkpart hoge 0% 100%
Information: You may need to update /etc/fstab.
パーティションをフォーマット
$ sudo mkfs.ext4 /dev/sdc1
出来上がり。
ちなみに
sudo parted -s /dev/sdc mklabel msdos mkpart primary 0% 100%
のように続けて一行でコマンドを書けるらしいが、これで作った SD は妙なエラーが出て実機で動かなかった。(要調査)
参考