Linux
parted

Parted を使ってディスクを初期化する

まとめ

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 は妙なエラーが出て実機で動かなかった。(要調査)

参考