はじめに
この実験では、Linux環境においてディスクパーティションとファイルシステムを管理するために必要な基礎スキルを習得します。fdiskのようなコマンドラインユーティリティを使用して、利用可能なディスクの確認、新しいパーティションの作成、および標準的なファイルシステムでのフォーマットを行います。学習を安全に進めるため、すべての操作は専用のセカンダリ仮想ディスク /dev/sdb 上で行い、プライマリOSディスクには一切触れません。
注意: この実験環境では、/dev/sdb はループデバイス(ディスクのように動作するファイル)として実装されています。パーティションを作成すると、loop13p1 や loop14p1 のような名前で表示されます。正確なループ番号はセッションごとに空いているデバイスによって異なるため、ここに示されている例とは異なる場合があります。実際のハードウェアと同様に、これらのパーティションに /dev/sdb1、/dev/sdb2 などのシンボリックリンクを作成してアクセスします。
一連の演習を通じて、標準的なLinuxパーティションを作成し、ext4ファイルシステムでフォーマットして、すぐに使用できるようにマウントする方法を学びます。その後、/etc/fstabファイルを編集して、起動時にこのファイルシステムが自動的にマウントされるように設定します。最後に、システムパフォーマンスに不可欠な要素である専用のLinuxスワップパーティションを作成・管理するスキルを身につけます。
ディスクの確認とfdiskによる新しいLinuxパーティションの作成
このステップでは、利用可能なディスクとそのパーティションテーブルを確認する方法を学びます。次に、強力なコマンドラインツールである fdisk ユーティリティを使用して、セカンダリディスク上に新しいパーティションを作成します。実環境においてパーティションを変更する際は、ミスがデータ損失につながる可能性があるため、細心の注意が必要です。この実験では、メインのOSディスク (/dev/sda) が影響を受けないよう、専用の仮想ディスク /dev/sdb を使用します。
まず、システムに接続されているすべてのブロックデバイス(ディスクとパーティション)の概要を確認しましょう。lsblk コマンドを使用すると、ツリー形式で分かりやすく表示されます。
lsblk
出力には、プライマリシステムディスク (vda) と、この実験用の仮想ディスクを表す loop13 や loop14 などのループデバイスが含まれます。正確なループデバイス番号は環境によって異なる場合があります。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
...
loop13 7:13 0 2G 0 loop
vda 252:0 0 40G 0 disk
├─vda1 252:1 0 1M 0 part
├─vda2 252:2 0 200M 0 part /boot/efi
└─vda3 252:3 0 39.8G 0 part /
ループデバイス(シンボリックリンクを通じて /dev/sdb としてアクセス可能)は、まだパーティションがない2GBの仮想ディスクであることがわかります。次に、fdisk を使用して /dev/sdb のパーティションテーブルを詳しく見てみましょう。-l フラグは指定されたデバイスのパーティションテーブルを一覧表示して終了します。fdisk でディスクレベルの情報を確認するにはroot権限が必要なため、sudo を使用する必要があります。
sudo fdisk -l /dev/sdb
出力には、ディスクのサイズ、セクタ、識別子などの詳細が表示されます。まだパーティションがないため、下部のデバイスリストは空です。
Disk /dev/sdb: 2 GiB, 2147483648 bytes, 4194304 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
注: ディスクを初めて使用する場合、新しいDOSディスクラベルの作成に関するメッセージが表示されることがあります。
次に、fdisk を対話モードで起動して新しいパーティションを作成します。このプロセスでは、一連の1文字コマンドを入力します。以下のコマンドを実行して /dev/sdb の管理を開始します。
sudo fdisk /dev/sdb
fdisk ユーティリティ内に入ると、Command (m for help): というプロンプトが表示されます。以下の手順に注意して進めてください。
新しいパーティションの作成: n と入力してEnterキーを押します。
パーティションタイプの選択: パーティションタイプ(プライマリまたは拡張)を選択するよう求められます。デフォルトはプライマリ (p) であり、今回はこれを使用します。Enterキーを押してデフォルトを受け入れます。
パーティション番号の選択: デフォルトは 1 です。これが最初のパーティションであるため、Enterキーを押して受け入れます。
最初のセクタの指定: デフォルト値はディスク上の最初の利用可能なセクタです。通常はこれで問題ありません。Enterキーを押してデフォルトを受け入れます。
最後のセクタまたはサイズの指定: セクタを計算する代わりに、人間が読みやすいサイズを指定できます。ここでは500MBのパーティションを作成します。+500M と入力してEnterキーを押します。
メモリ上のパーティションテーブルの表示: 保存する前に、変更内容を確認することをお勧めします。p と入力してEnterキーを押すと、新しいパーティションレイアウトが表示されます。新しいデバイス /dev/sdb1 が表示されるはずです。
ディスクへの変更の書き込み: ここまで行った変更はメモリ上にのみ存在します。ディスクのパーティションテーブルに保存するには、w と入力してEnterキーを押します。これにより変更が書き込まれ、fdisk が終了します。
対話セッションのまとめは以下の通りです。
Welcome to fdisk (util-linux 2.37.2).
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 0x54041549.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-4194303, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-4194303, default 4194303): +500M
Created a new partition 1 of type 'Linux' and of size 500 MiB.
Command (m for help): p
Disk /dev/sdb: 2 GiB, 2147483648 bytes, 4194304 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: 0x54041549
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 1026047 1024000 500M 83 Linux
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Invalid argument
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or partx(8).
パーティションテーブルを書き込んだ後、カーネルがパーティションテーブルを即座に再読み込みできなかったというメッセージが表示される場合があります。これはループデバイスを扱う際には正常な動作です。partprobe コマンドを実行して、オペレーティングシステムカーネルにパーティションテーブルを再読み込みさせます。
sudo partprobe
次に、lsblk を再度実行して、システムが新しいパーティションを認識しているか確認します。
lsblk /dev/sdb
出力には、ループデバイスとその新しいパーティションが表示されます。ループデバイスの設定により、パーティションはセッションに応じて loop13p1 や loop14p1 のように表示されます。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop13 7:13 0 2G 0 loop
└─loop13p1 259:0 0 500M 0 part
パーティションが /dev/sdb1 ではなく loop13p1 や loop14p1 のようなループバック名で表示されるため、シンボリックリンクを作成する必要があります。まず、実際のパーティションデバイスを特定します。p1$ というパターンは、親のループデバイスではなくパーティション名のみに一致させるためのものです。
PARTITION_DEVICE=$(lsblk -lno NAME /dev/sdb | grep -E "p1$" | head -1)
echo "Partition device: /dev/$PARTITION_DEVICE"
次に、パーティションのシンボリックリンクを作成します。
sudo ln -s /dev/$PARTITION_DEVICE /dev/sdb1
/dev/sdb1 が機能することを確認します。
lsblk /dev/sdb1
出力には、/dev/sdb1 としてアクセス可能なパーティションが表示されます。基盤となるデバイス名は依然として loop13p1 や loop14p1 などである可能性があります。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop13p1 259:0 0 500M 0 part
これで、/dev/sdb 上に新しい500MBのLinuxパーティションを作成し、/dev/sdb1 としてアクセスできるようになりました。
mkfs.ext4によるext4ファイルシステムの作成とフォーマット
このステップでは、作成した新しいパーティション /dev/sdb1 をファイルシステムでフォーマットします。ファイルシステムは、ファイルやディレクトリを保存・整理するために必要な構造を提供します。ファイルシステムがないと、オペレーティングシステムはパーティションへの読み書きができません。ここでは、パフォーマンス、信頼性、機能のバランスから現代のLinuxディストリビューションでデフォルトかつ最も広く使用されている ext4 を使用します。
ファイルシステムを作成するコマンドは mkfs(make filesystemの略)です。これは mkfs.ext4 や mkfs.xfs など、ファイルシステム固有の構築ツールのフロントエンドです。ここでは直接 mkfs.ext4 を使用します。この操作は破壊的であり、パーティション上の既存のデータはすべて消去されるため、sudo 権限が必要です。
/dev/sdb1 パーティションを ext4 ファイルシステムでフォーマットするには、以下のコマンドを実行します。
sudo mkfs.ext4 /dev/sdb1
このコマンドはファイルシステムを作成し、ファイルシステムのUUID、ブロックサイズ、inode数などのプロセスに関する情報を表示します。
mke2fs x.xx.x (xx-xxx-xxxx)
Creating filesystem with 128000 4k blocks and 32000 inodes
Filesystem UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Superblock backups stored on blocks:
32768, 98304
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
フォーマット後、ファイルシステムが正常に作成されたことを確認できます。blkid コマンドは、ファイルシステムタイプを含むブロックデバイスの属性を表示するため、この確認に最適です。
sudo blkid /dev/sdb1
出力から、/dev/sdb1 の TYPE が ext4 になっていることが明確にわかります。
/dev/sdb1: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="1a2b3c4d-01"
より詳細な情報を確認するには、-h フラグを付けて dumpe2fs コマンドを使用し、スーパーブロック情報を表示します。スーパーブロックには、ファイルシステムに関する重要なメタデータが含まれています。
sudo dumpe2fs -h /dev/sdb1
このコマンドは大量の出力を生成します。Filesystem magic number や Filesystem state などの重要な行を探して、ファイルシステムの整合性を確認してください。
dumpe2fs x.xx.x (xx-xxx-xxxx)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
...
これでパーティションのフォーマットが完了し、マウントしてデータを保存する準備が整いました。
ファイルシステムのマウント、テスト、アンマウント
このステップでは、フォーマットしたファイルシステムをオペレーティングシステムからアクセスできるようにする方法を学びます。このプロセスを「マウント」と呼びます。マウントとは、デバイス(/dev/sdb1など)上のファイルシステムを、ファイルシステムツリー内の特定のディレクトリ(「マウントポイント」)に接続することです。マウントされると、他のディレクトリと同じようにパーティションを操作できます。
まず、マウントポイントを作成する必要があります。これは単なる空のディレクトリです。一時的なマウントポイントは /mnt ディレクトリの下に作成するのが一般的です。/mnt/data というディレクトリを作成しましょう。/mnt はシステムディレクトリであるため、sudo が必要です。
sudo mkdir /mnt/data
次に、mount コマンドを使用して /dev/sdb1 パーティションを /mnt/data ディレクトリに接続します。
sudo mount /dev/sdb1 /mnt/data
ファイルシステムがマウントされたことを確認するために、まずマウントコマンドが成功したかどうかをステータスチェックで確認します。複数のコマンドを使用してマウントを確認します。
## マウントポイントにファイルシステムがマウントされているか確認
mountpoint /mnt/data
マウントが成功していれば、以下のように表示されます。
/mnt/data is a mountpoint
次に、df コマンドでディスク使用量を確認します。ループデバイスの設定により、パーティションはシンボリックリンク名ではなく、実際のデバイス名で表示される場合があります。出力には loop13p1、loop14p1、またはその他のループバックパーティション名が表示される可能性があります。
df -h /mnt/data
マウントされたファイルシステムのエントリが表示されるはずです。
Filesystem Size Used Avail Use% Mounted on
/dev/loop13p1 488M 2.6M 459M 1% /mnt/data
mount コマンドでも確認できます。
mount | grep /mnt/data
セッションで使用されているループバックパーティション名が表示されます。
/dev/loop13p1 on /mnt/data type ext4 (rw,relatime)
次に、新しいファイルシステムにデータを書き込めるかテストします。まず、マウントポイントの現在の所有者と権限を確認します。
ls -ld /mnt/data
以下のように表示されるはずです。
drwxr-xr-x 3 root root 4096 Dec 12 10:00 /mnt/data
マウントポイント内にファイルを作成してみます。
touch /mnt/data/testfile
このコマンドは「Permission denied(許可がありません)」エラーで失敗する可能性が高いです。これは、マウントされたファイルシステムのルートディレクトリが root ユーザーによって所有されているためです。これを修正するには、マウントポイントの所有権を現在のユーザー labex に変更します。
sudo chown labex:labex /mnt/data
もう一度ファイルを作成してみます。
touch /mnt/data/testfile
今度はコマンドが成功するはずです。ファイルが作成されたことを確認します。
ls -l /mnt/data
以下のように表示されます。
total 16
drwx------ 2 root root 16384 Dec 12 10:00 lost+found
-rw-r--r-- 1 labex labex 0 Dec 12 10:05 testfile
lost+found ディレクトリは ext4 ファイルシステムの標準機能で、ファイルシステム破損時にファイルを復旧するために使用されます。
ファイルシステムの使用が終わったら、umount コマンドを使用してアンマウントする必要があります。現在使用中のファイルシステム(例えば、カレントディレクトリがマウントポイント内にある場合など)はアンマウントできないことに注意してください。実際に試してみましょう。
まず、ディレクトリを /mnt/data に変更します。
cd /mnt/data
次に、アンマウントを試みます。ファイルシステムはデバイス名またはマウントポイントのどちらでも指定できます。
sudo umount /mnt/data
ターゲットがビジーであるというエラーメッセージが表示されます。
umount: /mnt/data: target is busy.
正常にアンマウントするには、まずディレクトリから移動する必要があります。ホームディレクトリに戻りましょう。
cd ~
次に、もう一度 umount コマンドを実行します。
sudo umount /mnt/data
コマンドは出力なしで実行されるはずです。mountpoint コマンドを実行して、マウントされていないことを確認できます。
mountpoint /mnt/data
以下のように表示されます。
/mnt/data is not a mountpoint
最後に、マウントポイントディレクトリを削除してクリーンアップします。
sudo rmdir /mnt/data
トラブルシューティングのヒント: mount コマンドが機能しない場合は、シンボリックリンクの代わりに実際のループデバイス名を使用してマウントを試みてください。
## 実際のデバイス名を確認
ACTUAL_DEVICE=$(readlink -f /dev/sdb1)
echo "Actual device: $ACTUAL_DEVICE"
## 実際のデバイス名を使用してマウント
sudo mkdir /mnt/data
sudo mount $ACTUAL_DEVICE /mnt/data
/etc/fstabによる永続的なマウントの設定
このステップでは、システムが起動するたびにファイルシステムが自動的にマウントされるようにする方法を学びます。前のステップで使用した mount コマンドは一時的なものであり、再起動するとマウントは解除されます。永続的なマウントを作成するには、/etc/fstab(ファイルシステムテーブル)という特別な設定ファイルにエントリを追加する必要があります。
システムは起動プロセス中に /etc/fstab を読み取り、どのファイルシステムをマウントするかを決定します。これは重要なファイルであるため、編集前にバックアップを作成することをお勧めします。
まず、現在の fstab ファイルのバックアップを作成します。
sudo cp /etc/fstab /etc/fstab.bak
次に、永続的なマウントポイントが必要です。前のステップでは /mnt/data を使用して削除しました。永続的なマウントには、ルートファイルシステム内にディレクトリを作成するのが一般的です。/data というディレクトリを作成しましょう。
sudo mkdir /data
/etc/fstab でデバイス名 (/dev/sdb1) を使用することもできますが、推奨されません。デバイス名は、ハードウェアの追加や削除によって再起動時に変更される可能性があるためです。より信頼性の高い方法は、ファイルシステム作成時に割り当てられ、変更されることのない「Universally Unique Identifier (UUID)」を使用することです。
/dev/sdb1 の UUID を見つけるには、再度 blkid コマンドを使用します。
sudo blkid /dev/sdb1
UUID が表示されます。この値を(引用符なしで)コピーしてください。
/dev/sdb1: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="1a2b3c4d-01"
次に、nano エディタを使用して /etc/fstab を編集します。システムファイルであるため、sudo を使用する必要があります。
sudo nano /etc/fstab
ファイルの末尾に移動し、パーティション用の新しい行を追加します。fstab エントリの形式は以下の通りです。
<device_identifier> <mount_point> <filesystem_type> <options> <dump> <pass>
以下の行を追加します。xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx は、blkid コマンドからコピーした実際の UUID に置き換えてください。
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data ext4 defaults 0 2
UUID=...: パーティションを一意のIDで識別します。/data: ファイルシステムがマウントされるディレクトリです。ext4: ファイルシステムのタイプです。defaults: ほとんどのケースに適した標準的なマウントオプションのセットです。0:dumpフィールドです。これは古いバックアップユーティリティのフラグであり、0に設定します。2:passフィールドです。これは起動時にファイルシステムをチェックする順序をfsckユーティリティに伝えます。1はルートファイルシステム用、2はその他の永続的なファイルシステム用、0はチェックを無効にします。
行を追加したら、Ctrl+X、Y、Enter の順に押してファイルを保存し、nano を終了します。
再起動してテストする代わりに、mount -a コマンドを使用できます。このコマンドは、/etc/fstab にリストされているがまだマウントされていないすべてのファイルシステムをマウントします。
sudo mount -a
エラーがなければ、コマンドは何も表示せずに完了します。df コマンドを使用して、ファイルシステムが正しくマウントされているか確認できます。
df -h | grep /data
/dev/sdb1 が /data にマウントされていることが確認できるはずです。
/dev/sdb1 488M 2.6M 459M 1% /data
これで、システムが起動するたびにパーティションが自動的にマウントされるようになります。
Linuxスワップパーティションの作成と管理
このステップでは、もう一つの特別なパーティションタイプである「Linuxスワップ」について学びます。スワップ領域は、物理RAMが不足したときにオペレーティングシステムが仮想メモリとして使用します。これにより、システムはメモリの非アクティブなページをディスクに移動し、アクティブなプロセス用にRAMを解放できます。十分なRAMの代わりにはなりませんが、スワップパーティションを持つことで、メモリ不足によるシステムクラッシュを防ぐことができます。
重要な注意: 新しいパーティションを作成する前に、/dev/sdb 上の既存のファイルシステムがアンマウントされていることを確認してください。デバイスが現在マウントされている場合(前のステップから)、パーティションテーブルを変更しようとすると「Device or resource busy」エラーが発生する可能性があります。
/dev/sdb 上に新しいパーティションを作成し、スワップ領域として設定します。まず、デバイスがマウントされていないことを確認してから、fdisk を使用してパーティションを作成します。すでに /dev/sdb1 を作成済みなので、この新しいパーティションは /dev/sdb2 になります。
## まず、デバイスがマウントされているか確認し、必要に応じてアンマウントする
lsblk /dev/sdb
sudo umount /data /mnt/data 2> /dev/null || true
## パーティションを作成する
sudo fdisk /dev/sdb
fdisk の対話プロンプト内で、以下のコマンドに従います。
新しいパーティションの作成: n と入力してEnterキーを押します。
パーティションタイプと番号の選択: プライマリパーティション (p) とパーティション番号 2 のデフォルトを受け入れるため、Enterキーを2回押します。
セクタの指定: 最初のセクタはデフォルトを受け入れます。サイズには256MBのパーティションを作成します。+256M と入力してEnterキーを押します。
パーティションタイプの変更: ここが重要なステップです。t と入力してパーティションタイプを変更します。パーティション番号を求められたら 2 と入力します。16進数コードを求められたら、"Linux swap / Solaris" に対応する 82 と入力します。
表示と確認: p と入力して変更を確認します。/dev/sdb2 のタイプが "Linux swap / Solaris" と表示されているはずです。
変更の書き込み: w と入力して新しいパーティションテーブルを保存し、終了します。
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (1026048-4194303, default 1026048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1026048-4194303, default 4194303): +256M
Created a new partition 2 of type 'Linux' and of size 256 MiB.
Command (m for help): t
Partition number (1,2, default 2): 2
Hex code (type L to list all codes): 82
Changed type of partition 'Linux' to 'Linux swap / Solaris'.
Command (m for help): p
Disk /dev/sdb: 2 GiB, 2147483648 bytes, 4194304 sectors
...
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 1026047 1024000 500M 83 Linux
/dev/sdb2 1026048 1550335 524288 256M 82 Linux swap / Solaris
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
パーティション作成後、/dev/sdb1 と同様に /dev/sdb2 のシンボリックリンクを作成する必要があります。まず、partprobe を実行してカーネルが新しいパーティションを認識していることを確認します。
sudo partprobe
次に、2番目のパーティションのシンボリックリンクを特定して作成します。
PARTITION2_DEVICE=$(lsblk -lno NAME /dev/sdb | grep p2 | head -1)
sudo ln -s /dev/$PARTITION2_DEVICE /dev/sdb2
パーティションにアクセスできることを確認します。
lsblk /dev/sdb2
パーティションをスワップ領域としてフォーマットする前に、デバイスがビジー状態でないことを確認する必要があります。「Device or resource busy」エラーが発生した場合は、デバイスがマウントされている可能性があります。まず既存のマウントを確認し、アンマウントします。
## 現在のマウント状態を確認
lsblk /dev/sdb
## デバイスがマウントされている場合はアンマウントする
sudo umount /data /mnt/data 2> /dev/null || true
パーティションが作成されアクセス可能になったので、mkswap コマンドを使用してスワップ領域としてフォーマットします。
sudo mkswap /dev/sdb2
フォーマット後、スワップ領域を有効化できます。まず、free -h コマンドで現在のスワップ使用量を確認します。
free -h
出力では、Swapが 0B と表示されるはずです。
total used free shared buff/cache available
Mem: 1.9Gi 151Mi 1.6Gi 0.0Ki 202Mi 1.7Gi
Swap: 0B 0B 0B
次に、swapon コマンドを使用して新しいスワップパーティションを有効化します。
sudo swapon /dev/sdb2
free -h および swapon -s(サマリー)を使用して、スワップ使用量を再度確認します。
free -h
total used free shared buff/cache available
Mem: 1.9Gi 152Mi 1.4Gi 0.0Ki 202Mi 1.6Gi
Swap: 256Mi 0B 256Mi
swapon -s
Filename Type Size Used Priority
/dev/sdb2 partition 262140 0 -2
スワップ領域の合計が増加していることがわかります。スワップパーティションを無効にするには、swapoff コマンドを使用します。
sudo swapoff /dev/sdb2
free -h を再度実行して、無効化されたことを確認します。スワップ領域はゼロに戻ります。これは、実行中のシステムでスワップ領域を動的に管理する方法を示しています。
swapon コマンドは現在のセッションのみでスワップを有効にします。再起動後も自動的にこのスワップパーティションを有効にするには、UUID を使用して /etc/fstab に追加します。まず、mkswap によって割り当てられた UUID を表示します。
sudo blkid /dev/sdb2
出力にはスワップの UUID とタイプが含まれています。
/dev/sdb2: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="swap" PARTUUID="1a2b3c4d-02"
/etc/fstab を開きます。
sudo nano /etc/fstab
末尾に以下の行を追加します。例の UUID を blkid 出力の UUID に置き換えてください。
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx none swap sw 0 0
Ctrl+X、Y、Enter の順に押してファイルを保存し、nano を終了します。none という値は、スワップがファイルシステムのマウントポイントを使用しないことを示し、sw オプションはデバイスをスワップとして有効にします。
再起動せずに新しい /etc/fstab エントリをテストします。
sudo swapon -a
スワップパーティションが再びアクティブになっていることを確認します。
swapon --show
出力には 256MB のスワップパーティションがリストされるはずです。/dev/sdb2 はシンボリックリンクであるため、基盤となるループデバイス名で表示される場合があります。
トラブルシューティングのヒント: このステップで「Device or resource busy」エラーが発生する場合、通常は以下の理由が考えられます。
デバイスまたはそのパーティションのいずれかがまだマウントされているか、プロセスがデバイスにアクセスしています。
これを解決するには、パーティション操作を進める前に sudo umount /data /mnt/data を実行して、すべてのマウントポイントがアンマウントされていることを確認してください。
まとめ
この実験では、Linuxシステムにおけるディスクパーティションとファイルシステムを管理するための基本的なスキルを学びました。まず lsblk を使用して利用可能なブロックデバイスを確認し、fdisk ユーティリティを使用してセカンダリディスク上に新しいプライマリパーティションを作成しました。パーティション作成後、mkfs.ext4 を使用して ext4 ファイルシステムでフォーマットしました。また、新しいファイルシステムをディレクトリにマウントし、ステータスを確認し、アンマウントする練習も行いました。最後に、パーティションの UUID を使用して /etc/fstab ファイルを編集し、システム起動時に自動的にマウントされるように永続的なマウント設定を行いました。
さらに、専用のスワップ領域を作成・管理するプロセスも扱いました。これには、fdisk を再度使用してパーティションを作成し、タイプを "Linux swap" に変更する作業が含まれます。その後、mkswap コマンドでスワップ領域として準備し、swapon を使用して有効化しました。再起動後もスワップ領域を永続化するために、/etc/fstab ファイルに対応するエントリを追加しました。



