Linux で新しいディスクにパーティションを作ってマウントする

Linux,プログラムmount,ディスク,マウント

Linux に新しい空のディスクを加えて、パーティションを作って、フォーマットして、マウントするまでの一連の流れのメモです。

ディスク認識の確認

まず管理者 (root) 権限で fdisk コマンドを使って認識されているディスクを確認します。

fdisk -l コマンドを実行します。

$ sudo fdisk -l                                                                                                                               [2023/07/20 14:31:22]
Disk /dev/nvme0n1: 238.47 GiB, 256060514304 bytes, 500118192 sectors
Disk model: KBG50ZNS256G NVMe KIOXIA 256GB
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: gpt
Disk identifier: 2179EDA5-B63A-4DFB-B49D-198F8C04A70D

Device             Start       End   Sectors  Size Type
/dev/nvme0n1p1      2048   1050623   1048576  512M EFI System
/dev/nvme0n1p2   1050624 498116607 497065984  237G Linux filesystem
/dev/nvme0n1p3 498116608 500117503   2000896  977M Linux swap


Disk /dev/sda: 1.82 TiB, 2000398934016 bytes, 3907029168 sectors
Disk model: WDC WD20EZBX-00A
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/nvme0n1p1 などの NVMe SSD がシステムディスクで、/dev/sda の 1.82 TiB あるディスクが追加した新品のディスクです。

パーティションの作成

ディスクが認識できていることを確認できたので、パーティションを作成します。ここでも fdisk コマンドを使います。

先ほど確認した /dev/sda に対して管理者権限で fdisk /dev/sda を実行します。

$ sudo fdisk /dev/sda                                                                                                                         [2023/07/20 14:32:24]

Welcome to fdisk (util-linux 2.36.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x50cf2fe6.

Command (m for help):

実行すると色々出てきます。まずは (m for help) に従って m を入れてみます。

Command (m for help): m

Help:

  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition
   F   list free unpartitioned space
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table
   i   print information about a partition

  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)

  Script
   I   load disk layout from sfdisk script file
   O   dump disk layout to sfdisk script file

  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table

コマンドリストが出てきます。今回は新しいパーティションを作成したいので

  • n add a new partition

を使います。すると以下のようなプロンプトが出てきます。

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): 

パーティションタイプを選択します。プライマリパーティションはディスクに最大 4 つまでしか作成できません。拡張パーティションはそれ以上にパーティションを作りたいときに使うものです。今回はディスク全体を使って一つのパーティションだけ作りたいのでデフォルトの p を指定します。

続いてパーティション番号とセクタの開始位置、終了位置を指定します。

Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-3907029167, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-3907029167, default 3907029167):

ここで、パーティション番号は最初のパーティションなので 1 を指定しています。今回はディスク全体を使いたいので、開始セクタ終了セクタデフォルトに指定されているものをそのまま使います。

これで

Created a new partition 1 of type 'Linux' and of size 1.8 TiB.

と表示されるので 1.8 TiB のパーティションを作る準備ができたことが分かります、p コマンドを使うと確認できます。

Command (m for help): p
Disk /dev/sda: 1.82 TiB, 2000398934016 bytes, 3907029168 sectors
Disk model: WDC WD20EZBX-00A
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x50cf2fe6

Device     Boot Start        End    Sectors  Size Id Type
/dev/sda1        2048 3907029167 3907027120  1.8T 83 Linux

新しくパーテイションが設定され、/dev/sda1 ができることになっています。

最後に w コマンドで変更内容を書き込んで終了します。

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

パーティションのフォーマット

続いて作成したパーティションをフォーマットします。今回は Linux の標準である ext4 にフォーマットします。管理者権限で mkfs コマンドを使います。-t オプションを使ってフォーマットとして ext4 を指定し、先ほど作成した /dev/sda1 をフォーマットします。

$ sudo mkfs -t ext4 /dev/sda1                                                                                                                 [2023/07/20 15:11:15]
mke2fs 1.46.2 (28-Feb-2021)
Discarding device blocks: done
Creating filesystem with 488378390 4k blocks and 122101760 inodes
Filesystem UUID: 3a5ad979-dcf2-4e06-91ed-af4b885d3270
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done

ものの数秒でできました。

システムへのマウント

パーティションを作成してフォーマットしたのでシステムにマウントします。まずはマウントポイントの作成をします。ここでは /mnt に作ることにします。例として my_storage という名前にします。

$ sudo mkdir /mnt/my_storage

作成したマウントポイントに mount コマンドを使ってマウントします。

$ sudo mount /dev/sda1 /mnt/my_storage

これでマウント完了です。

しかしこのままだと、システムが起動するたびにマウントする必要があります。それを回避するためには /etc/fstab に設定を書いておきます。

まず、ディスクパーティションを区別するための識別子である UUID を確認します。管理者権限で blkid コマンドを実行します。

$ sudo blkid
/dev/nvme0n1p1: UUID="4205-723F" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="d610ae9c-4789-4d84-b2df-9818bff6b7da"
/dev/nvme0n1p2: UUID="21df3471-17d0-4c9a-94ac-4fe83d6027f7" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="39053b53-129f-4db9-a146-4bb740d7aa07"
/dev/nvme0n1p3: UUID="4400ec5a-186d-4d29-b78e-da2c7c555fd1" TYPE="swap" PARTUUID="2e3b25a8-a906-46df-9506-d6de536c12f8"
/dev/sda1: UUID="3a5ad979-dcf2-4e06-91ed-af4b885d3270" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="50cf2fe6-01"

接続されているすべてのディスクの UUID が一覧にされます。ここでは /dev/sda1 の UUID だけコピーしておきます。

/etc/fstab を編集します。中身はすでにシステム用のマウントなどが色々書いてあるので、新しい設定を末尾に追記することにします。

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a 
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# systemd generates mount units based on this file, see systemd.mount(5). 
# Please run 'systemctl daemon-reload' after making changes here.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/nvme0n1p2 during installation
UUID=21df3471-17d0-4c9a-94ac-4fe83d6027f7 /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/nvme0n1p1 during installation
UUID=4205-723F  /boot/efi       vfat    umask=0077      0       1
# swap was on /dev/nvme0n1p3 during installation
UUID=4400ec5a-186d-4d29-b78e-da2c7c555fd1 none            swap    sw              0       0
UUID=3a5ad979-dcf2-4e06-91ed-af4b885d3270 /mnt/wind_data  ext4    defaults  0       0

一行には以下のような順で 5 つのフィールドを書き込みます。

  • UUID
  • マウントポイント
  • フォーマット
  • マウントオプション(今回は defaults を指定)
  • dump コマンドのバックアップ対象かのフラグ(ここではバックアップしない 0 を指定)
  • 起動時に fsck がチェックする順番
    • 1: チェックの優先度高(ルートファイルシステムは必ず 1 を指定する)
    • 2: チェックの優先度低
    • 0: チェックしない

これで再起動しても同じところにマウントされるようになりました。

参考資料