====== 概要 ======
* UbuntuでHDDやUSBメモリなどのストレージをフォーマットする方法です
* ストレージを使用する際は、保存領域をパーティションという区画に分けます。
* パーティションの数は任意で、2つ以上に分けると1つのストレージをあたかも複数のデバイスに見せることができます。
* 以下の設定を行うとストレージ内のデータが全部消えるので、気をつけてください
====== 環境 ======
* Ubuntu 18.04 LTS
====== 手順 ======
パーティションを分けるソフトとして代表的なものに fdisk, gdisk, parted があります。
ただしfdiskは古い規格のソフトであり2TB未満のストレージにしか使用できませんので、現在では使用が推奨されません。
* gdiskはfdiskとほぼ同じインターフェイスで使用することができるので、fdiskに慣れている人はこちらを使うことが多いです。
* ただしgdiskはパーティションテーブルがGPTにのみ対応しています(普通はこれで問題ありません)
* **以下の作業を行うとストレージのデータが全部消去されるので、デバイス名を絶対に間違えないようにしましょう**
ここではpartedを使用しました。
また、例として東芝製のHDDである[[https://toshiba.semicon-storage.com/jp/storage/product/internal-specialty/nas/articles/mn07aca-series.html|MN06ACA800]]を使いました
* HDDをパソコンに設置します
* HDDに割り振られたデバイス名をpartedで調べます
$ sudo parted -l
(略)
Model: ATA TOSHIBA MN06ACA8 (scsi)
Disk /dev/sdb: 8002GB
Sector size (logical/physical): 512B/4096B
(略)
* デバイス名が /dev/sdb であることがわかります。
* 以下では /dev/sdb の部分を自分の環境に合わせて変更してください。
* パーティションを作成します
$ sudo parted /dev/sdb
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
* パーティションの形式はGPT(GUIDパーティションテーブル)にします
(parted) mklabel gpt
* すでにパーティションがある場合は次のやり取りが発生します
Warning: Partition(s) on /dev/sdb are being used.
Ignore/Cancel? ignore
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes
* パーティションを作成します(以下は2つ作る場合)
(parted) mkpart
Partition name? []? hdd1
File system type? [ext2]? ext4
Start? 0%
End? 50%
(parted) mkpart
Partition name? []? hdd2
File system type? [ext2]? ext4
Start? 50%
End? 100%
* パーティション名はつけなくても構いません(その場合は何も入力せずにエンターを押す)
* パーティションが1つで良い場合は、最初のmkpartで Start 0%, End 100% としてください
* ファイルシステムは多くのLinuxディストリビューションで標準的に使われているext4に変更します
* 複数のパーティションを作る場合は、再度 mkpart を実行します
* パーティションごとにデバイス名が /dev/sdb1, /dev/sdb2, ... と割り当てられていきます
* 設定が正しく行われたか確認します
(parted) p
* partedを終了します
(parted) q
* 各パーティションをext4でフォーマットします。以下はパーティションを2つに分けた場合です。
$ sudo mkfs.ext4 /dev/sdb1
$ sudo mkfs.ext4 /dev/sdb2
====== マウント ======
ストレージにアクセスできるようにします。
以下では /dev/sdb1 にアクセスする場合を考えます。
* マウントポイントを作成します(以下では /mnt 以下に storage というディレクトリを作ってマウントポイントとしましたが、どこでも良いです)
$ sudo mkdir /mnt/storage
* マウントします
$ sudo mount -t ext4 /dev/sdb1 /mnt/storage
* こうすることで /mnt/storage/ を参照したコンピュータは /dev/sdb1 にアクセスします。
* 使用しているコンピュータのファイルシステムがマウントしたデバイスのものと同じ場合は -t オプションは不要です
* 実際にストレージが見えるようになったことを確認します
$ df -h
(略)
/dev/sdb1 7.3T 93M 6.9T 1% /mnt/storage
* ストレージの所有者情報はマウントポイントのものと同じになります。
* 今のままだとマウントしたストレージ内のファイルを編集するために管理者権限が必要になってしまうので、所有者情報を変更します。usernameを自分のユーザー名に入れ替えてください
$ sudo chown username:username /mnt/storage
* マウントを終了したい場合は次のようにします
$ sudo umount /dev/sdb1
==== 自動マウント ====
コンピュータを再起動するとマウントが解除されてしまいます。
ストレージを繋ぎっぱなしにする場合は、起動時に自動的にマウントするようにします
* HDDのUUIDを調べます
$ sudo blkid /dev/sdb1
/dev/sdb1: UUID="6f80d415-a3fb-4b62-8880-15909ae0c9a3" TYPE="ext4" PARTUUID="0022a75b-accb-4815-b465-7cd015db8247"
* ls -l /dev/disk/by-uuid/ や lsblk -f でも調べることができます
* /etc/fstab の最後に自動マウントするディスクを登録します
$ sudo vi /etc/fstab
(略)
/swapfile none swap sw 0 0
UUID=6f80d415-a3fb-4b62-8880-15909ae0c9a3 /mnt/storage ext4 defaults 0 1
* /etc/fstab の設定でマウントします
$ sudo mount -a
===== SSDを起動ディスクに、HDDをファイル保存用ディスクにする方法 =====
HDDを増設するありがちな用途は、SSDを起動ディスクに、HDDをホームディレクトリ用のディスクにすることだと思います。
/home をマウントポイントとして増設HDDをマウントします。
* /mnt にマウントポイントを作成してマウントします
$ sudo mkdir /mnt/storage
$ sudo mount /dev/sdb1 /mnt/storage
* homeディレクトリをHDDに移します。usernameは自身のユーザー名に置き換えてください。
$ sudo mv /home/username /mnt/storage
* 複数ユーザーがいるならrsyncを使うのが楽です。元のファイルは残るので、必要なければコピー後は消します。
$ sudo rsync -av /home/ /mnt/storage
* 自動マウントにより /home がHDDを参照するようにします
$ sudo vi /etc/fstab
(略)
/swapfile none swap sw 0 0
UUID=6f80d415-a3fb-4b62-8880-15909ae0c9a3 /home ext4 defaults 0 1
* /etc/fstab 内の設定でマウントします
$ sudo mount -a
====== 補遺 ======
===== パーティションを分けない場合 =====
* フォーマットしたいストレージのデバイス名を調べます
$ sudo fdisk -l
(略)
Disk /dev/sdb: 7.28 TiB, 8001563222016 bytes, 15628053168 sectors
Disk model: TOSHIBA MN06ACA8
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
(略)
* デバイス名が /dev/sdb であることがわかります(ディレクトリのパスではありません)
* ext4形式でフォーマットします
$ sudo mkfs.ext4 /dev/sdb
* この場合、パーティションテーブルは作成されません。loopと呼ばれます
* Windowsはloopを認識できないので、Windowsからはアクセスできなくなります
==== fdisk ====
これは記録のために残しています。
通常は parted を使用してください。
ここでは例として4GBのUSBメモリを使用しました。
* ストレージのデバイス名を調べます
$ sudo fdisk -l
(略)
Disk /dev/sdc: 3.8 GiB, 4026531840 bytes, 7864320 sectors
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: 0x15f006ae
(略)
* デバイス名が /dev/sdc であることがわかります
* 以下では /dev/sdc の部分を自分の環境に合わせて変更してください。
* パーティションを作成します
$ sudo fdisk /dev/sdc
Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help):
* mと入力するとメニューが出てきます
* まず d で既存のパーティションを削除しますCommand (m for help): d
* 削除したいパーティションが複数ある場合は、何回もdを繰り返します
* ストレージが新品である場合などではパーティションが設定されていないので No partition is defined yet! と言われます
* 次に n と入力して新しいパーティションを作成します
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):
Partition number (1-4, default 1):
First sector (2048-7864319, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-7864319, default 7864319):
Created a new partition 1 of type 'Linux' and of size 3.8 GiB.
* この場合だとパーティションを最大4つまで分けることができます。
* パーティション番号1の領域には、デバイス名として /dev/sdc1 が割り当てられます(2,3,4も同様)
* パーティションが1つだけで良い場合は、基本的に全部デフォルトでよいので何も入力せずにエンターを押していきます
* 2つ以上のパーティションを作成する場合は、確保したい大きさにsectorを切っていきます。
* 最後に w と入力して、以上の設定をストレージに書き込んで終了します
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
* パーティションが期待通りに分かれているか確認します
$ sudo fdisk -l /dev/sdc
* 各パーティションをext4でフォーマットします
$ sudo mkfs.ext4 /dev/sdc1
$ sudo mkfs.ext4 /dev/sdc2 # パーティション2を作成した場合
$ sudo mkfs.ext4 /dev/sdc3 # パーティション3を作成した場合
$ sudo mkfs.ext4 /dev/sdc4 # パーティション4を作成した場合