104.1 レッスン 1
Certificate: |
LPIC-1 |
---|---|
Version: |
5.0 |
Topic: |
104 デバイス、Linuxファイルシステム、ファイルシステム階層標準 |
Objective: |
104.1 パーティションとファイルシステムを作成する |
Lesson: |
1 of 1 |
はじめに
どのOSでもディスクを使用するには、まずパーティションに分割します。パーティションとは、1つの物理的なディスクを論理的に分割して、OSからは複数台のディスクのように見せる仕組みです。物理的なディスクをどのように分割したかを示す情報が、物理ディスクの先頭にあるパーティションテーブルと呼ばれる領域に記録されます。パーティションテーブルには、開始セクター、終了セクター、パーティションタイプ、その他の詳細情報が記録されています。
通常、各パーティションは、同じ物理ディスクにある場合でも、OSからは別々の「ディスク」であるように見えます。Windowsでは各パーティションに C:
(歴史的な理由からこれがメインディスクです)や D:
のような文字が割り当てられます。Linuxでは各パーティションに /dev/sda1
や /dev/sda2
といった名前の ブロックデバイスファイル
が割り当てられます。
このレッスンでは、fdisk
、gdisk
、parted
という3つのユーティリティを使ってパーティションを作成・削除・復元・リサイズすること、パーティションにファイルシステムを作成すること、仮想メモリとして利用される スワップパーティション ないし スワップファイル を作成することを学びます。
Note
|
SSDやフラッシュストレージのような最近のストレージには「ディスク(円盤状の部品)」が存在しないのですが、歴史的な理由から、このレッスンを通じて、ストレージメディアを「ディスク」と表記します。 |
パーティションテーブル〜MBRとGPT
ディスクにパーティション情報を保存する2つの方式があります。MBR(Master Boot Record)とGPT(GUID Partition Table)です。
- MBR
-
MS-DOS(より正確には1983年のPC-DOS 2.0)という初期の時代から採用されてきた方式で、数十年間にわたりPCの標準的なパーティション形式でした。ディスクの最初のセクターがパーティションテーブルになり、その直後に ブートセクター とブートローダー(Linuxでは通例 GRUB ブートローダー)が書き込まれます。2TB以上のディスクに対応できない、1つのディスクに4つまでしか基本パーティションを作成できないといったいった制限があり、最近のシステムでは使われなくなりつつあります(訳注:物理的な新しいマシンでは使われなくなっていますが、手軽なので小規模な仮想マシンでは今もよく使われています)。
- GPT
-
MBRの制約を解消するために規定されたパーティション方式(GUID Parittion Table)です。ディスクサイズに実際上の制限はありませんし、作成できるパーティションの数もOSによる制限しか受けません。UEFI(Unified Extensible Firmware Interface)と呼ばれる、旧来のBIOSを置き換える新しいファームウェア仕様の一部であり、新しいマシンはほぼすべてがこちらのパーティション方式を採用しています。
システム管理の仕事をするならきっとMBRとGPTの両方に出くわすことでしょう。ですから、それぞれの方式でパーティションを作成・削除・変更するツールを使いこなせるようになることが肝要です。
FDISKでMBRパーティションを管理する
LinuxでMBRパーティションを管理する標準的なユーティリティは fdisk
です。メニューに沿って対話的に使います。fdisk
に続けて編集するディスクに対応するデバイス名を入力して実行します。例えばこのように実行します。
# fdisk /dev/sda
このコマンドを実行すると、SATA接続の最初のデバイス(sda
)のパーティションテーブルを編集することになります。/dev/sda1
のようなパーティションではなく、/dev/sda
のような物理ディスクに対応するデバイスを指定することに注意してください。
Note
|
このレッスン中のディスクに関連する操作はすべて |
fdisk
コマンドを実行すると、ウェルカムメッセージと警告が表示され、コマンドの入力待ち状態になります。
# fdisk /dev/sda Welcome to fdisk (util-linux 2.33.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help):
ここで表示される警告には重要なことが書かれています。パーティションを作成・編集・削除しても w
(write)コマンドを実行するまではディスクへの書き込みは行われません。w
キーさえ押さなければデータを失うことを心配せずに「練習」できます。変更を保存せずに終了するには q
コマンドを実行します。
Note
|
|
現在のパーティションテーブルを表示する
p
(print)コマンドで現在のパーティションテーブルの情報を表示できます。一例を挙げます。
Command (m for help): p Disk /dev/sda: 111.8 GiB, 120034123776 bytes, 234441648 sectors Disk model: CT120BX500SSD1 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: 0x97f8fef5 Device Boot Start End Sectors Size Id Type /dev/sda1 4096 226048942 226044847 107.8G 83 Linux /dev/sda2 226048944 234437550 8388607 4G 82 Linux swap / Solaris
各列の意味は次のとおりです。
Device
-
パーティションに割り当てられているデバイスです。
Boot
-
パーティションに「ブート可能フラグ」がセットされているか否かが表示されます。
Start
-
パーティションの開始セクター番号です。
End
-
パーティションの終了セクター番号です。
Sectors
-
パーティションのセクター総数です。これにセクターサイズ(上部のSector sizeに表示されていて、この例では512バイト)を掛けるとパーティションのサイズをバイト単位で求めることができます。
Size
-
人間に読みやすい形でパーティションサイズが表示されます。上の例ではギガバイト単位で表示されています。
Id
-
パーティションタイプを表す数値(コード)です。
Type
-
パーティションタイプです。
基本パーティションと論理パーティション
MBRでは4つまでの 基本パーティション を作れますが、ディスクの大容量化などからすぐに4つでは足りないことがわかりました。互換性を保ったまま、より多くのパーティションを扱えるように 拡張パーティション が規定されて、より多くのパーティションを扱えるようになりました。ただし、多くのOSは基本パーティションからしかブートできません。
拡張パーティション は、基本パーティションの1つをさらに分割して、複数の 論理パーティション を閉じ込めたものです。拡張パーティション はいわば「容器」であり、それ自体をディスクとして使用する事はできません。拡張パーティション に含むことができる 論理パーティション の数は、OSによって異なります。
Linuxでは、基本パーティションと論理パーティションを全く同じように扱えますから、拡張パーティションを作成したからといって不都合はありません。
パーティションを作成する
パーティションを作成するには、fdisk
の n
コマンドを使用します。状況に応じて、基本(p)
・拡張(e)
・論理(l)
のどのパーティションを作成するかが問い合わせられて、その後パーティションの開始セクターと終了セクターが問い合わせられます。
開始セクターには、未割り当て領域の先頭セクター番号がデフォルトで入力されていますから、特段の事情がなければデフォルトのままでよいでしょう。終了セクターを指定する代わりに K
、M
、G
、T
、P
(キロ、メガ、ギガ、テラ、ペタ)の文字を使ってサイズを指定することもできます。1GBのパーティションを作成したいとすれば、終了セクターに +1G
と指定します。次の例を見てください。
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-3903577, default 2048): 2048 Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-3903577, default 3903577): +1G
未割り当て領域を確認する
ディスクの未割り当て領域を調べるには、F
コマンドを使用します。拡張パーティションがあれば、その中の未割り当て領域も表示されます。次に一例を示します。
Command (m for help): F Unpartitioned space /dev/sdd: 881 MiB, 923841536 bytes, 1804378 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes Start End Sectors Size 2099200 3903577 1804378 881M
パーティションを削除する
パーティションを削除するには、d
コマンドを使用します。複数のパーティションがあれば、削除するパーティション番号の入力を求められます。1つしかパーティションがない場合にはパーティション番号の入力を求められることなく 即座に削除されます。
拡張パーティションを削除すると、その中にある論理パーティションも全部削除されることに注意してください。
隙間に注意
新しいパーティションは、ディスクの 連続した 未割り当て領域に作成するものであることに気をつけてください。例えば、以下のようなパーティションマップだとしましょう。
Device Boot Start End Sectors Size Id Type /dev/sdd1 2048 1050623 1048576 512M 83 Linux /dev/sdd2 1050624 2099199 1048576 512M 83 Linux /dev/sdd3 2099200 3147775 1048576 512M 83 Linux
ここでパーティション2を削除してから、空き領域を調べてみます。
Command (m for help): F Unpartitioned space /dev/sdd: 881 MiB, 923841536 bytes, 1804378 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes Start End Sectors Size 1050624 2099199 1048576 512M 3147776 3903577 755802 369M
未割り当て領域は合計で881MBですが、連続する 領域は512MBしかありませんから、700MBのパーティションを作ろうとしても次のように失敗します。
Command (m for help): n Partition type p primary (2 primary, 0 extended, 2 free) e extended (container for logical partitions) Select (default p): p Partition number (2,4, default 2): 2 First sector (1050624-3903577, default 1050624): Last sector, +/-sectors or +/-size{K,M,G,T,P} (1050624-2099199, default 2099199): +700M Value out of range.
一般的に、4個以上のパーティションを作成したい場合には、1〜3番目のパーティションを基本パーティションとして作成し、4番目を拡張パーティションとした上で、5番目以降を論理パーティションとして作成します。
パーティションタイプを変更する
ここまで説明してきませんでしたが、それぞれのパーティションは、用途(OS種別や後述のファイルシステム種別)に応じた パーティションタイプ というパラメータを持っています。Linuxの fdisk
コマンドで作成したパーティションには、Linux用のパーティションであることを示す16進数で83という番号のパーティションタイプが、デフォルトで割り当てられています。ただし、Linuxではパーティションタイプにシステム管理上の単なるメモ以上の意味はありません。
利用可能なパーティションタイプを確認するには、fdisk
の l
コマンドを使用します。パーティションタイプのコード(16進数)を確認したら、t
コマンドを入力し、タイプを変更するパーティション番号を指示してから、コードを入力します。
パーティションタイプとファイルシステムとを混同しないようにしてください。当初はパーティションタイプとファイルシステムとに対応関係がありましたが、今では対応関係がありません。パーティションタイプに関係なく、どのファイルシステムでも作成することができます(後述)。
Tip
|
メモという意味では、Linuxタイプのパーティションのコード |
GDISKでGPTパーティションを管理する
ディスクにMBRパーティションを作成する場合には fdisk
を使いますが、GPTパーティションを作成する場合には gdisk
を使います。gdisk
のインターフェイスは fdisk
がモデルになっているので、gdisk /dev/sda
のように実行してから表示されるプロンプトでほとんど同じコマンドを使います。w
コマンドを実行しない限り、ディスクに書き込みが行われないのも同じです。
現在のパーティションテーブルを表示する
p
(print)コマンドで現在のパーティションテーブルの情報を表示できます。一例を挙げます。
Command (? for help): p Disk /dev/sdb: 3903578 sectors, 1.9 GiB Model: DataTraveler 2.0 Sector size (logical/physical): 512/512 bytes Disk identifier (GUID): AB41B5AA-A217-4D1E-8200-E062C54285BE Partition table holds up to 128 entries Main partition table begins at sector 2 and ends at sector 33 First usable sector is 34, last usable sector is 3903544 Partitions will be aligned on 2048-sector boundaries Total free space is 1282071 sectors (626.0 MiB) Number Start (sector) End (sector) Size Code Name 1 2048 2099199 1024.0 MiB 8300 Linux filesystem 2 2623488 3147775 256.0 MiB 8300 Linux filesystem
冒頭部分から fdisk
との違いがいくつかあります。
-
各ディスクに割り当てられた一意のディスク識別子(GUID)が表示されています。これは128ビットの16進数で、パーティションテーブルを作成したときにランダムに割り当てられます。この数値は3.4 × 1038通りありますから、2つのディスクに同じGUIDが割り当てられる可能性は皆無に等しいです。GUIDは、どのパーティションからOSをブートするか、あるいは、どのパーティションをマウントするかなどを指定するために使えます。GUIDを使えば
/dev/sdb
のようなデバイスパスを指定しなくてもよくなります。 -
Partition table holds up to 128 entries(パーティションテーブルの最大項目数は128です)
という文言に注目してください。GPTディスクでは128個までのパーティションを扱うことができ、拡張パーティションのような複雑な仕組みを使う必要はありません。 -
空き領域が最終行に表示されますから、
fdisk
でのF
コマンドに相当するコマンドを実行する必要はありません。
パーティションを作成する
fdisk
と同様に、n
コマンドでパーティションを作成できます。パーティション番号と開始セクター及び終了セクター(またはサイズ)に加えて、パーティションタイプが尋ねられます。GPTでは、16進数4桁でパーティションタイプを指定し、MBRよりも多くのパーティションタイプをサポートしています。L
コマンドでサポートされているタイプの一覧を確認できますので、用途に応じたパーティションタイプを選択します。メモであることはMBRと同様ですから、通常はデフォルトの 8300
(Linux filesystem)を選択するのが無難でしょう。
パーティションを削除する
パーティションを削除するには、d
コマンドを使用して、パーティション番号を入力します。fdisk
とは異なり、ディスクにパーティションが1つしかなくても自動的にパーティションが選択されることはありません。
GPTでは、パーティション番号が飛び飛びにならないようにソートできます。s
コマンドを実行するだけなので簡単です。例えば、次のようなパーティションテーブルだとします。
Number Start (sector) End (sector) Size Code Name 1 2048 2099199 1024.0 MiB 8300 Linux filesystem 2 2099200 2361343 128.0 MiB 8300 Linux filesystem 3 2361344 2623487 128.0 MiB 8300 Linux filesystem
2番目のパーティションを削除すると次のようになります。
Number Start (sector) End (sector) Size Code Name 1 2048 2099199 1024.0 MiB 8300 Linux filesystem 3 2361344 2623487 128.0 MiB 8300 Linux filesystem
s
コマンドを実行すると次のようになります。
Number Start (sector) End (sector) Size Code Name 1 2048 2099199 1024.0 MiB 8300 Linux filesystem 2 2361344 2623487 128.0 MiB 8300 Linux filesystem
3番目のパーティションが2番目のパーティションになりました。
復元オプション
GPTでは、パーティション情報のバックアップコピーがディスク上に保存されますから、データが破損しても復元することができます。gdisk
がパーティションテーブルの破損を検出した時や、r
コマンドを実行した時に表示されるリカバリーメニューから処理方法を指定します。
リカバリーメニューからは、MBRをGPTに変換したり、逆に(可能であれば)GPTをMBRに変換することもできます。リカバリーメニューで ?
と入力すると、リカバリーコマンドの一覧が説明付きで表示されます。
ファイルシステムの作成
OSがディスクにファイルを保存できるようにするには、パーティション(ないしはディスク全体)に ファイルシステム を作成してフォーマットする必要があります。ファイルシステム とは、ディスク上にディレクトリやファイルを保管する方法を規定する仕様であり、その仕様に則って保存されたデータであり、またそれらへのアクセス方法を実装したプログラムでもあります。
Linuxでは多くのファイルシステムがサポートされています。ext(Extended Filesystem)系のようなLinuxネィテイブのファイルシステムだけでなく、MS-DOSのFAT、Windows NTのNTFS、macOSのHFSやHFS+なども利用できます。
Linuxでファイルシステムを作成する(フォーマットする)には、mkfs
コマンドを使います。このコマンドは、ファイルシステムごとの専用のコマンド(たとえば mkfs.ext4
など)を呼び出すラッパーです。
ext2/ext3/ext4ファイルシステムを作成する
Extended Filesystem(ext)はLinuxのために開発された最初のファイルシステムです。ext2、ext3、ext4と順に進化してきました。現在ではext4が多くのLinuxディストリビューションでデフォルトのファイルシステムになっています。
mkfs.ext2
でext2、mkfs.ext3
でext3、mkfs.ext4
でext4のファイルシステムを作成できます。実は、これらのユーティリティは mke2fs
という別のプログラムへのシンボリックリンクです。mke2fs
は呼び出され方に応じて、作成するファイルシステムを切り替えますが、動作やパラメータはどの場合でも同じです。
一番シンプルな使い方は次のとおりです。
# mkfs.ext2 TARGET
TARGET
はファイルシステムを作成するデバイス名です。例えば、パーティション /dev/sdb1
にext3ファイルシステムを作成するなら、次のようなコマンドになります。
# mkfs.ext3 /dev/sdb1
作成するファイルシステムに応じたコマンドを使う代わりに、mke2fs
コマンドの -t
オプションの後にファイルシステムの名前を指定することもできます。例えば、次の2つコマンドは同じはたらきをします。どちらのコマンドでも /dev/sdb1
にext4ファイルシステムを作成します。
# mkfs.ext4 /dev/sdb1 # mke2fs -t ext4 /dev/sdb1
コマンドラインパラメータ
mke2fs
には様々なオプションとパラメータがあります。重要なものをいくつか紹介します。これらは mkfs.ext2
、mkfs.ext3
、mkfs.ext4
でも共通です。
-b SIZE
-
デバイスのデータブロックのサイズを設定します。
SIZE
には1024、2048、4096のいずれかを指定します。(訳注:ブロックサイズを大きくするとシーケンシャルアクセスのパフォーマンスが向上しますが、小さなファイルが多い場合のディスクの利用効率が悪くなります。) -c
-
ファイルシステムを作成する前にデバイスの不良ブロックをチェックします。
mkfs.ext4 -c -c TARGET
のように-c
を2回繰り返すと、時間はかかるもののより綿密なチェックを行います。 -d DIRECTORY
-
指定した
DIRECTORY
の内容を、新しく作成するファイルシステムのルートディレクトリにコピーします。あらかじめ用意されたファイルがすでにある状態のディスクを作成できるということです。 -F
-
危険なオプションです。他のオプションが指定されていようが、意味をなさない指定であろうが、ターゲットデバイスが不適切であろうが、強制的にファイルシステムを作成します。
-F -F
のように2回繰り返すと、マウントされていて使用中のデバイス上にファイルシステムを作成することさえできてしまいます。そのようなことは絶対にしてはいけません。 -L VOLUME_LABEL
-
ボリュームラベルを
VOLUME_LABEL
に設定します。最大で16文字です。 -n
-
このオプションは利用価値があります。ファイルシステムの作成をシミュレートして結果を表示します。お試しモードだと考えてください(訳注:dry-runと呼ぶことも多いです)。ディスクに変更を加える前に結果を試してみることはよい習慣です。
-q
-
静音モードです。通常と同じように実行されますが、ターミナルへの出力が行われません。スクリプトから実行するときに便利です。
-U UUID
-
パーティションのUUID(Universally Unique Identifier)を指定します。UUIDは16進数表記の128ビットの数値で、これによりOSがパーティションを識別できます。この数値は、
D249E380-7719-45A1-813C-35186883987E
のように、8桁-4桁-4桁-4桁-12桁という形で表されます。UUIDを指定する代わりに、clear
を指定するとUUIDをクリア、random
を指定するとランダムに作成されたUUIDを付与、time
を指定すると現在時刻に基づくUUIDを付与します。 -v
-
冗長モードです。通常よりも多くの情報を出力します。進行状況を確認したいときなどに使います。
XFSファイルシステムを作成する
XFSは、1993年にSilicon Graphics社がIRIX OS(訳注:商用UNIXの一種)のために開発したファイルシステムです。特に大きなファイルが多い場合のパフォーマンスに優れているもののメモリ使用量が多いと言われていて、大規模なサーバー環境などでよく使われています。
XFSファイルシステムを管理するツールは xfsprogs
パッケージに含まれています。Linuxディストリビューションによってはデフォルトで入っていないこともあり、その場合は手動でインストールします。Red Hat Enterprise LinuxなどのディストリビューションではデフォルトでXFSファイルシステムを使っています。
XFSファイルシステムは、ジャーナリングファイルシステム の一種であり、内部的には ログセクション と データセクション の2つの部分に分けられます。ファイルシステム操作をいったんログセクション記録しておき、後にまとめてデータセクションを更新することで、障害が発生したときにファイルシステムの不整合が起きにくい仕組みです。ログセクションとデータセクションを別のディスクに置くことで、パフォーマンスをより向上させることもできます。(訳注:ext3、ext4もジャーナリングファイルシステムの一種です。)
XFSファイルシステムを作成するには mkfs.xfs TARGET
コマンドを使用します。TARGET
にはファイルシステムを作成するデバイス名を指定します。例えば、mkfs.xfs /dev/sda1
のようなコマンドを実行します。
mke2fs
と同じように mkfs.xfs
には様々なオプションがあります。重要なオプションをいくつか紹介します。
-b size=VALUE
-
ファイルシステムのブロックサイズを
VALUE
で指定します(単位はバイト)。デフォルトは4096バイト(4 KiB)、最小は512バイト、最大は65536バイト(64 KiB)です。 -m crc=VALUE
-
(このオプションや次のオプションのように)
-m
で始まるオプションはメタデータを変更するオプションです。このオプションはディスクのメタデータのCRC32整合性チェックをVALUE
が1
なら有効に、0
なら無効にします。エラー検知とハードウェアクラッシュからの回復に役立つのでデフォルトでは有効になっています。パフォーマンスへの悪影響は最小限にとどめられていますから、無効にする理由は普通ありません。(訳注:LPIC1の範囲外です。) -m uuid=VALUE
-
パーティションのUUIDを指定します。UUIDは、
1E83E3A3-3AE9-4AAC-BF7E-29DFFECD36C0
のように、8桁-4桁-4桁-4桁-12桁という形で表される、16進数の32文字(128ビット)の数値です。 -f
-
ターゲットデバイスに既にファイルシステムがある場合でも、上書きしてファイルシステムを強制的に作成します。
-l logdev=DEVICE
-
ログセクションをデータセクションの内部に作らず指定したデバイスに作ります。(訳注:LPIC1の範囲外です。)
-l size=VALUE
-
ログセクションのサイズを
VALUE
で指定します。単位をつけなければバイト単位になり、メガバイトを表すm
やギガバイトを表すg
を数値の後につけることもできます。例えば-l size=10m
と指定すると、ログセクションのサイズが10メガバイトになります。(訳注:LPIC1の範囲外です。) -q
-
静音モードです。作成するファイルシステムのパラメータを出力しなくなります。
-L LABEL
-
ラベルを
LABEL
に設定します。最大で12文字です。 -N
-
mke2fs
の-n
オプションと同様に、実際にはファイルシステムを作成せずパラメータを表示します。
FATまたはVFATファイルシステムを作成する
MS-DOSと共に1981年に登場したFATファイルシステムは、年月を経てFAT16、VFATへと改良され、1996年にはWindows 95 OSR2とともにリリースされたFAT32に結実しました。
FAT16は、オリジナルのFAT(FAT12)を改良し、より大きなファイルを扱えるようにしたものです。VFATはFAT16の拡張形式で、最大255文字までの長いファイル名をサポートしたものです(訳注:ファイル名の扱いが変わっただけで、ファイルシステムとしてはFAT16と全く同じです)。FATもVFATも同じ mkfs.fat
で扱えます。mkfs.vfat
は mkfs.fat
のエイリアス(別名)です。
FATファイルシステムには大きなディスクでの使用を制約する重大な欠点があります。例えば、FAT16は、最大で4GBのボリューム、2GBのファイルまでしか扱えません。FAT32は2PBのボリュームまで扱えるようになりましたが、4GBのファイルまでしか扱えません。この制約があるため、FATファイルシステムは、容量が2GB以内の小さいフラッシュドライブやメモリーカード、あるいは他のファイルシステムをサポートしていない古いデバイスやOSでよく使われます。
FATファイルシステムを作成するには、mkfs.fat TARGET
コマンドを使用します。TARGET
にはファイルシステムを作成するデバイス名を指定します。例えば、mkfs.fat /dev/sdc1
のようなコマンドを実行します。
mkfs.fat
にも様々なオプションがあります。重要なオプションをいくつか紹介します。man mkfs.fat
コマンドを実行すると表示されるマニュアルで全オプションとその説明を確認できます。
-c
-
ファイルシステムを作成する前に、デバイスの不良ブロックをチェックします。
-C FILENAME BLOCK_COUNT
-
FILENAME
で指定した名前のファイルを作成し、その中にFATファイルシステムを作成します。後でdd
のようなユーティリティでデバイスに書き込んだりループバックデバイスとしてマウントしたりできるように、空の「ディスクイメージ」を作成する際に便利です。このオプションを指定するときには、デバイス名の後にファイルシステムのブロック数(BLOCK_COUNT
)を指定することが必須になっています。 -F SIZE
-
FAT(File Allocation Table)のサイズを設定します。
SIZE
には12(FAT12)、16(FAT16)、32(FAT32)のいずれかを指定します。このオプションを指定しなければ作成するファイルシステムのサイズに応じて自動的に適切なサイズが選ばれます。 -n NAME
-
ファイルシステムのボリュームラベル(名前)を
NAME
に設定します。最大11文字です。デフォルトでは名前なしになります。 -v
-
冗長モードです。通常よりも多くの情報を出力します。
Note
|
|
exFATファイルシステムを作成する
exFATは、ディスクサイズとファイルサイズに上限があるというFAT32の重大な制約に対処するために2006年にMicrosoftが編み出したファイルシステムです。exFATでは最大ファイルサイズは16エクサバイトで(FAT32では4GBでした)、最大ディスクサイズは128ペタバイトです。
3つの主要なOS(Windows、Linux、mac OS)でサポートされていますから、大容量のフラシュドライブやメモリーカードや外付けハードディスクのようにOSをまたいで使う場合に適しています。実際に、32GBを超えるSDXCメモリーカードのデフォルトファイルシステムとして SDアソシエーション はexFATを採用しています。
exFATファイルシステムを作成するデフォルトのユーティリティは mkfs.exfat
で、これは mkexfatfs
へのリンクのことがあります。mkfs.exfat TARGET
のように使用し、TARGET
にはファイルシステムを作成するデバイス名を指定します。例えば、mkfs.exfat /dev/sdb2
のようなコマンドを実行します。(訳注:インストールされていない場合は、exfatprogsないしexfat-utilsパッケージでインストールできます。)
ここまで紹介してきた他のユーティリティとは対照的に、mkfs.exfat
のオプションは僅かです。(訳注:指定できるオプションが異なるバージョンを採用しているディストリビューションもあるようです。)
-i VOL_ID
-
ボリュームIDとして
VOL_ID
に指定した32ビットの16進数を設定します。このオプションを指定しなければ現在時刻に基づくIDが設定されます。 -n NAME
-
ボリュームラベルを
NAME
に設定します。最大15文字です。デフォルトでは名前なしになります。 -p SECTOR
-
ディスク上の最初のパーティションの最初のセクターを指定します。デフォルトは0です。
-s SECTORS
-
1クラスターあたりの物理セクターの数を指定します。1、2、4、8などのように2の累乗の値を指定します。
Btrfsファイルシステムを理解する
Btrfs(正式には B-Tree Filesystem)は、2007年からOracle CorporationとFujitsu、Red Hat、Intel、SUSEなどがLinux用に開発している次世代ファイルシステムです。(訳注:日本では「バターエフエス」や「ビーツリーエフエス」と呼ぶ人が多いようです。)
Btrfsは、現在の大容量ストレージのニーズに応えるために開発された、新しいファイルシステムです。(RAIDでのストライピングやミラーリングのような)複数デバイスのサポート、透過圧縮、SSD最適化、増分バックアップ、スナップショット、オンラインデフラグ、オフラインチェック、(クォータが設定できる)サブボリューム、重複排除などの機能を備えています。
Btrfsは CoW(Copy On Write) ファイルシステムの一種で、クラッシュに強いです。また、多機能な割にはシンプルであり、多くのLinuxディストリビューションでサポートされています。SUSEのようにデフォルトのファイルシステムに採用しているディストリビューションもあります。(訳注:Btrfsに対する評価は分かれており、Red HatはRHEL7以降でBtrfsのサポートを打ち切っています。)
Note
|
従来のファイルシステムでは、ファイルの上書きをする際に、古いデータを新しいデータで直接置き換えます。CoW ファイルシステムでは、新しいデータを空き領域に書き込み、ファイルのメタデータがその新しいデータを指すように更新してから、必要が無くなった古いデータを削除します。この仕組みでは、新しいデータをきちんと書き込み、もう必要なくなったことを確認してから古いデータを削除するので、クラッシュした際にデータが失われる可能性が低くなります。また、古いデータを消さずにスナップショットとして残しておくことも容易になります。 |
Btrfsファイルシステムを作成する
Btrfsファイルシステムを作成するには mkfs.btrfs
を使います。次のように、オプションを指定せずにデバイス名だけを指定したコマンドを実行すると、指定したデバイスにBtrfsファイルシステムを作成します。
# mkfs.btrfs /dev/sdb1
Tip
|
システムに |
-L
オプションでファイルシステムのラベル(名前)を設定できます。最大256文字で、改行文字は使用できません。
# mkfs.btrfs /dev/sdb1 -L "New Disk"
Tip
|
ラベルにスペースを含む場合は上の例のように |
mkfs.btrfs
コマンドで複数のデバイスを指定できるというBtrfsの特徴は注目に値します。Btrfsには、複数のハードディスクを組み合わせて1つの仮想的なディスクとして扱う RAID や LVM に相当する機能が内包されています。複数のディスクにデータを分散・冗長化する方法を、-m
オプション(メタデータの冗長化)と -d
オプション(データブロックの冗長化)で指定します。詳細は mkfs.btrs
のマニュアルで確認して下さい。
たとえば、2つのパーティション /dev/sdb1
と /dev/sdc1
を連結して、1つの大きなファイルシステムを作成するには、次のコマンドを実行します。
# mkfs.btrfs -d single -m single /dev/sdb /dev/sdc
Warning
|
上記のように複数のパーティションを連結するファイルシステムには利点があるようにも見えますが、データの安全性の観点からは問題があります。1つのディスクが壊れると、ファイルシステム全体が利用できなくなってしまうからです。たくさんのディスクを連結して巨大なファイルシステムを作成したい場合は、(LPIC1の範囲外ですが)データを複数のディスクに分散して格納するRAIDに相当するオプションを指定します。 |
サブボリュームを管理する
サブボリュームは、既存のボリュームに割り当てられた領域の一部を利用して、独立したボリュームを作成するものです。作成したサブボリュームは、そのまま親ボリューム内のディレクトリとして使うこともできますし、独立したファイルシステムとして任意の位置にマウントして利用することもできます。サブボリュームごとにクォータ(容量制限)をかけることもできますので、体系だったシステム管理が行いやすくなります。
Note
|
サブボリュームはパーティションではありません。パーティションはドライブ上にあらかじめ決まった領域を割り当てるので、あるパーティションの領域が逼迫しているのに別のパーティションには余裕があるといった問題が後々生じることがあります。サブボリュームは親ボリューム(ファイルシステム)の領域の一部をそのまま使用するので、そのような問題とは無縁です。 |
/mnt/disk
にマウントされたBtrfsファイルシステムがあり、その中にバックアップを保存するための BKP
という名前のサブボリュームを作成するには、次のコマンドを実行します。
# btrfs subvolume create /mnt/disk/BKP
/mnt/disk
ファイルシステムの内容を一覧表示してみましょう。サブボリュームと同じ名前の新しいディレクトリがあることがわかります。
$ ls -lh /mnt/disk/ total 0 drwxr-xr-x 1 root root 0 jul 13 17:35 BKP drwxrwxr-x 1 carol carol 988 jul 13 17:30 Images
Note
|
サブボリューム も 通常のディレクトリと同じようにアクセスできます。 |
次のコマンドを実行すると、サブボリュームがアクティブであることを確認できます。
# btrfs subvolume show /mnt/disk/BKP/ Name: BKP UUID: e90a1afe-69fa-da4f-9764-3384f66fa32e Parent UUID: - Received UUID: - Creation time: 2019-07-13 17:35:40 -0300 Subvolume ID: 260 Generation: 23 Gen at creation: 22 Parent ID: 5 Top level ID: 5 Flags: - Snapshot(s):
mount
コマンドに -t btrfs -o subvol=NAME
オプションを指定して、このサブボリュームを /mnt/BKP
にマウントします(NAME
の部分は先ほど作成したサブボリュームの名前である BKP
とします)。
# mount -t btrfs -o subvol=BKP /dev/sdb1 /mnt/bkp
Note
|
|
スナップショットを操作する
サブボリュームの一種に、スナップショット があります。これは、作成時に親ボリュームの指定したディレクトリ以下の内容がそのまま含まれている点が、先ほど説明したサブボリュームと異なります。
スナップショットの作成時点ではスナップショットと元ボリュームの内容が全く同じですが、次第に異なっていきます。元ボリュームの変更(ファイルの作成、名前の変更、削除など)はスナップショットに反映されませんし、スナップショットの変更も元ボリュームに反映されません。
スナップショットはファイルを複製しないので、作成時にはディスク領域をほとんど使いません。ファイルシステムのツリーを複製するだけで、同じ元データを参照しています。どちらかのデータを変更すると、Copy on Writeの仕組みによって新しいデータブロックが作成されて、元のデータブロックはそのまま残ります。親データとスナップショットデータは、すこしずつ異なっていきますが、消費される容量は「変更された」データブロックの大きさだけです。
スナップショットを作成するコマンドはサブボリュームを作成するコマンドとほとんど同じで、btrfs subvolume snapshot
を使います。次のコマンドは /mnt/disk
にマウントされているBtrfsファイルシステムのスナップショットを /mnt/disk/snap
に作成します。データをコピーしないので、スナップショットの作成はほぼ一瞬で完了します。
# btrfs subvolume snapshot /mnt/disk /mnt/disk/snap
/mnt/disk
には以下の内容があるとします。
$ ls -lh total 2,8M -rw-rw-r-- 1 carol carol 109K jul 10 16:22 Galaxy_Note_10.png -rw-rw-r-- 1 carol carol 484K jul 5 15:01 geminoid2.jpg -rw-rw-r-- 1 carol carol 429K jul 5 14:52 geminoid.jpg -rw-rw-r-- 1 carol carol 467K jul 2 11:48 LG-G8S-ThinQ-Mirror-White.jpg -rw-rw-r-- 1 carol carol 654K jul 2 11:39 LG-G8S-ThinQ-Range.jpg -rw-rw-r-- 1 carol carol 94K jul 2 15:43 Mimoji_Comparativo.jpg -rw-rw-r-- 1 carol carol 112K jul 10 16:20 Note10Plus.jpg drwx------ 1 carol carol 366 jul 13 17:56 snap -rw-rw-r-- 1 carol carol 118K jul 11 16:36 Twitter_Down_20190711.jpg -rw-rw-r-- 1 carol carol 324K jul 2 15:22 Xiaomi_Mimoji.png
作成したスナップショットがsnapディレクトリとして現れていることに注目してください。いくつかファイルを削除してからディレクトリの内容を確認してみましょう。
$ rm LG-G8S-ThinQ-* $ ls -lh total 1,7M -rw-rw-r-- 1 carol carol 109K jul 10 16:22 Galaxy_Note_10.png -rw-rw-r-- 1 carol carol 484K jul 5 15:01 geminoid2.jpg -rw-rw-r-- 1 carol carol 429K jul 5 14:52 geminoid.jpg -rw-rw-r-- 1 carol carol 94K jul 2 15:43 Mimoji_Comparativo.jpg -rw-rw-r-- 1 carol carol 112K jul 10 16:20 Note10Plus.jpg drwx------ 1 carol carol 366 jul 13 17:56 snap -rw-rw-r-- 1 carol carol 118K jul 11 16:36 Twitter_Down_20190711.jpg -rw-rw-r-- 1 carol carol 324K jul 2 15:22 Xiaomi_Mimoji.png
snapディレクトリの中には先ほど削除したファイルが存在していますから、そこからコピーして元に戻すこともできます。
$ ls -lh snap/ total 2,8M -rw-rw-r-- 1 carol carol 109K jul 10 16:22 Galaxy_Note_10.png -rw-rw-r-- 1 carol carol 484K jul 5 15:01 geminoid2.jpg -rw-rw-r-- 1 carol carol 429K jul 5 14:52 geminoid.jpg -rw-rw-r-- 1 carol carol 467K jul 2 11:48 LG-G8S-ThinQ-Mirror-White.jpg -rw-rw-r-- 1 carol carol 654K jul 2 11:39 LG-G8S-ThinQ-Range.jpg -rw-rw-r-- 1 carol carol 94K jul 2 15:43 Mimoji_Comparativo.jpg -rw-rw-r-- 1 carol carol 112K jul 10 16:20 Note10Plus.jpg -rw-rw-r-- 1 carol carol 118K jul 11 16:36 Twitter_Down_20190711.jpg -rw-rw-r-- 1 carol carol 324K jul 2 15:22 Xiaomi_Mimoji.png
読み取り専用のスナップショットを作成することもできます。スナップショットの内容を変更できないことを除いては、通常の書き込み可能なスナップショットと同じです。読み取り専用のスナップショットを使うとある時点での内容を「固定」することができます。スナップショットの作成時に -r
パラメータをつけると読み取り専用スナップショットになります。人為的なミスに対する保険としてはとても便利ですが、同じディスク上にデータがあるのですからバックアップにはなりません。
# btrfs subvolume snapshot -r /mnt/disk /mnt/disk/snap
圧縮に関して少々
Btrfsは透過圧縮をサポートしています。3種類のアルゴリズムから選べます。-o compress
オプションをつけてファイルシステムをマウントすれば、ファイルごとに自動で圧縮されます。圧縮できないファイルを圧縮しようとはしませんから、システムリソースが浪費されるということはありません。1つのディレクトリに圧縮ファイルと非圧縮ファイルが共存していても問題ありません。デフォルトの圧縮アルゴリズムはZLIBですが、LZO(速いけれども圧縮率は低い)やZSTD(ZLIBより速く圧縮率は同等)も選べます。圧縮レベルも選べます(詳細については btrfs(5)
の Mount Optionsを参照してください)。
GNU Parted
GNU Parted はパーティションの作成・削除・移動・リサイズ・コピーができる非常に強力なパーティションエディタです。GPTとMBRのどちらでも使え、ディスク管理はこれだけでほとんどカバーできます。
GNOMEデスクトップ環境の GParted やKDEデスクトップ環境の KDE Partition Manager のように、グラフィカルに parted
が使えるフロントエンドツールがいろいろあります。それでも、グラフィカルなデスクトップ環境が使えないサーバーのセットアップではコマンドラインを使うことになりますから、parted
の使い方を知っておいたほうがよいでしょう。
Warning
|
|
パーティションの操作をするには parted DEVICE
と入力して実行します。DEVICE
はパーティションを操作するデバイスです。例えば parted /dev/sdb
のようなコマンドを実行します。fdisk
や gdisk
と同じように、コマンドを入力するプロンプトが表示される対話的なコマンドラインインターフェイスが起動します。
# parted /dev/sdb GNU Parted 3.2 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted)
Warning
|
デバイスを指定しないとプライマリーディスク(通常は |
ディスクを選択する
起動時にコマンドラインで指定したディスクを変更するには parted
のプロンプトで select
コマンドを実行します。次に示すように、select
の後にデバイス名を指定します。
(parted) select /dev/sdb Using /dev/sdb
情報を取得する
print
コマンドでシステムに接続されているパーティションやディスクの詳細情報を見ることができます。
print
とだけ入力すると、現在選択しているデバイスのパーティション情報が表示されます。パーティションの開始位置や終了位置の表示単位は、unit
コマンドで切り替えられます。
(parted) print Model: ATA CT120BX500SSD1 (scsi) Disk /dev/sda: 120GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 2097kB 116GB 116GB primary ext4 2 116GB 120GB 4295MB primary linux-swap(v1)
print devices
と入力すると、すべてのブロックデバイス(ディスク)の一覧が表示されます。
(parted) print devices /dev/sdb (1999MB) /dev/sda (120GB) /dev/sdc (320GB) /dev/mapper/cryptswap (4294MB)
print all
と入力すると接続されているデバイスの情報を一望できますし、print free
と入力すると各デバイスの空き領域を確認できます。
(parted) print free Model: ATA CT120BX500SSD1 (scsi) Disk /dev/sda: 120GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 32.3kB 2097kB 2065kB Free Space 1 2097kB 116GB 116GB primary ext4 116GB 116GB 512B Free Space 2 116GB 120GB 4295MB primary linux-swap(v1) 120GB 120GB 2098kB Free Space
空のディスクにパーティションテーブルを作成する
mklabel
コマンドの後にパーティションテーブルのタイプを指定すると、空のディスクにパーティションテーブルを作成できます。
パーティションテーブルのタイプにはいろいろありますが、MBRパーティションテーブルを作成する msdos
とGPTパーティションテーブルを作成する gpt
の2つを覚えておけば十分です。MBRパーティションテーブルを作成するなら次のコマンドを実行します。
(parted) mklabel msdos
GPTパーティションテーブルを作成するなら次のコマンドを実行します。
(parted) mklabel gpt
パーティションを作成する
mkpart PARTTYPE FSTYPE START END
コマンドでパーティションを作成できます。
PARTTYPE
-
パーティションタイプです。MBRパーティションの場合、
primary
、logical
、extended
のどれかを指定します。GPTの場合は、パーティション名(Linux filesystem
など)を指定します。 FSTYPE
-
ファイルシステムを指定します。
parted
はファイルシステムを実際には 作成せず、OSに向けたフラグを設定するだけだということに注意してください。ext4
、xfs
、fat32
などのファイルシステムタイプ名を指定しますが、GPTの場合は省略できます。 START
-
パーティションの開始位置を指定します。指定できる単位が数種類あります。
2s
はディスクの2つ目のセクター、1m
はディスクの先頭から1メガバイトになります。B
(バイト)やg
(ギガ)、%
(ディスク容量のパーセンテージ)でも指定できます。(訳注:実際の位置(開始セクター)はディスクに応じた適当な値に調整されますので、大まかにパーセンテージを使って指定するのがお勧めです。) END
-
パーティションの終了位置を指定します。パーティションサイズではなく、ディスクの先頭からの終了位置を指定することに気をつけてください。例えば、
100m
と指定したらそのパーティションはディスクの先頭から100MB辺りの適当な位置で終了するということです。START
の部分と同じ単位で指定できます。
(parted) mkpart primary ext4 1m 100m
このコマンドは、ディスクの先頭から1メガバイト辺りから始まり100メガバイト辺りで終了する、ext4
の基本パーティションを作成します。
パーティションを削除する
rm
コマンドの後にパーティション番号を指定すると、そのパーティションを削除できます。パーティション番号は print
コマンドで確認できます。例えば、rm 2
は現在選択しているディスクの2番目のパーティションを削除します。
パーティションを復元する
parted
は削除されたパーティションを復元することもできます。最初に次のようなパーティションだったとします。
Number Start End Size File system Name Flags 1 1049kB 99.6MB 98.6MB ext4 primary 2 99.6MB 200MB 100MB ext4 primary 3 200MB 300MB 99.6MB ext4 primary
誤って rm 2
を実行してパーティション2を削除してしまったとしましょう。rescue START END
コマンドを実行するとこのパーティションを復元できます。START
は復元するパーティションのおおよその開始位置、END
はおおよその終了位置です。
parted
はディスクをスキャンしてパーティションを探索し、発見したパーティションを復元します。上の例ではパーティション2は99.6MBから開始して200MBで終了しているので、次のコマンドで復元できます。
(parted) rescue 90m 210m Information: A ext4 primary partition was found at 99.6MB -> 200MB. Do you want to add it to the partition table? Yes/No/Cancel? y
これでパーティション2を復元します。ただし、ファイルシステムが作成されているパーティションしか復元できません。ファイルシステムが作成されていない空のパーティションは探索できないのです。
ext2/3/4パーティションをリサイズする
parted
ではパーティションのリサイズもできますが、注意事項がいくつかあります。
-
リサイズ中にパーティションを使用したりマウントしたりしてはいけません。
-
サイズを拡張するには、そのパーティションの 後 に、拡張したいサイズ以上の空き領域が必要になります。
resizepart
の後にパーティション番号と終了位置を指定します。次のようなパーティションテーブルがあるとします。
Number Start End Size File system Name Flags 1 1049kB 99.6MB 98.6MB ext4 primary 2 99.6MB 200MB 100MB ext4 3 200MB 300MB 99.6MB ext4 primary
resizepart
でパーティション1を拡張しようとしてもエラーになります。パーティション1の後にパーティション2があって空き領域がないからです。パーティション3はその後に空き領域がありますから、リサイズできます。print free
で確認してみましょう。
(parted) print free Model: Kingston DataTraveler 2.0 (scsi) Disk /dev/sdb: 1999MB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 17.4kB 1049kB 1031kB Free Space 1 1049kB 99.6MB 98.6MB ext4 primary 2 99.6MB 200MB 100MB ext4 3 200MB 300MB 99.6MB ext4 primary 300MB 1999MB 1699MB Free Space
次のコマンドでパーティション3を350MBのところまで拡張してみましょう。
(parted) resizepart 3 350m (parted) print Model: Kingston DataTraveler 2.0 (scsi) Disk /dev/sdb: 1999MB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 99.6MB 98.6MB ext4 primary 2 99.6MB 200MB 100MB ext4 3 200MB 350MB 150MB ext4 primary
拡張後の終了位置はディスクの開始位置から数えるので、350mと入力すると、終了位置がこれまでの300MBから350MBに変更され、50MB分だけ拡張します。
パーティションのリサイズだけでは片手落ちです。ファイルシステムのリサイズも必要になります。 ext2/3/4ファイルシステムは resize2fs
コマンドでリサイズできます。上の例では、まだファイルシステムのリサイズをしていないので、マウントしたときに古いサイズが表示されます(訳注:古いサイズは99.6MBでここに表示されている88Mとは異なりますが、ディスクの全ての領域をデータ保存に使うわけではないので df
で表示されるサイズは少し小さくなります)。
$ df -h /dev/sdb3 Filesystem Size Used Avail Use% Mounted on /dev/sdb3 88M 1.6M 80M 2% /media/carol/part3
resize2fs DEVICE SIZE
コマンドでファイルシステムをリサイズできます。DEVICE
にはリサイズするデバイス名を、SIZE
には新しいサイズを指定します。SIZE
を省略すると、そのパーティションいっぱいまで拡張されます。リサイズする前にマウントを解除しておきます。
次のコマンドで実行します。
$ sudo resize2fs /dev/sdb3 resize2fs 1.44.6 (5-Mar-2019) Resizing the filesystem on /dev/sdb3 to 146212 (1k) blocks. The filesystem on /dev/sdb3 is now 146212 (1k) blocks long. $ df -h /dev/sdb3 Filesystem Size Used Avail Use% Mounted on /dev/sdb3 135M 1.6M 123M 2% /media/carol/part3
パーティションを 縮小 するときは、この手順を逆に実行します。まず ファイルシステムを新しいサイズに縮小してから、parted
コマンドでパーティションを縮小します。
Warning
|
パーティションを縮小するときはこの順番に気をつけてください。ファイルシステムを縮小する前にパーティションを縮小するとデータが失われます。 |
上の例でパーティションを縮小して元のサイズに戻してみます。
# resize2fs /dev/sdb3 88m resize2fs 1.44.6 (5-Mar-2019) Resizing the filesystem on /dev/sdb3 to 90112 (1k) blocks. The filesystem on /dev/sdb3 is now 90112 (1k) blocks long. # parted /dev/sdb3 (parted) resizepart 3 300m Warning: Shrinking a partition can cause data loss, are you sure you want to continue? Yes/No? y (parted) print Model: Kingston DataTraveler 2.0 (scsi) Disk /dev/sdb: 1999MB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 99.6MB 98.6MB ext4 primary 2 99.6MB 200MB 100MB ext4 3 200MB 300MB 99.7MB ext4 primary
Tip
|
縮小後のサイズを指定する代わりに |
スワップパーティションの作成
Linuxの仮想メモリでは、スワッピング と言って、メモリページを必要に応じてRAMとディスクの間で移動します。スワッピングに使用するディスク上の領域として、独立したパーティションを使うケースが一般的です。そのためのパーティションを スワップパーティション あるいは スワップ領域 と呼びます。スワップパーティション専用のパーティションタイプがあり、使用前には mkswap
コマンドで初期化しておきます。
fdisk
や gdisk
でスワップパーティションを作成できます。これまでに説明した通常のパーティションの作成と同じ手順です。パーティションタイプを Linux swap に設定します。
-
fdisk
ではt
コマンドでタイプを指定します。対象のパーティションを選んでから82
と入力します。そしてw
コマンドで書き込んで終了します。 -
gdisk
でもt
コマンドでタイプを指定しますが、コードは8200
です。そしてw
コマンドで書き込んで終了します。
parted
ではパーティションの作成時にファイルタイプとして linux-swap
と指定します。例えば、次のコマンドを実行するとディスクの300MBから800MBまでの500MBのスワップパーティションを作成します。
(parted) mkpart primary linux-swap 301m 800m
パーティションを作成してタイプを設定したら、パーティションを指定して mkswap
コマンドを実行して初期化します。
# mkswap /dev/sda2
スワップパーティションを追加したことをカーネルに通知して、スワップ領域としての利用を開始させるために、swapon
コマンドを実行します。設定を永続化したいときは、/etc/fstab
に記載します(トピック104.3で解説します)。
# swapon /dev/sda2
スワップ領域としての利用を停止するには、swapoff
コマンドを実行します。
Linuxでは、パーティションではなく ファイル をスワップ領域として使うこともできます。dd
(ないしは fallocate
)コマンドで適当なサイズの空ファイルを作成してから、mkswap
コマンドと swapon
コマンドを実行します。
カレントディレクトリに myswap
という名前の1GBの空ファイルを作ってから、スワップファイルとして使えるようにしてみましょう。
ここでは、dd
コマンドでスワップファイルを作成します。
$ dd if=/dev/zero of=myswap bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 7.49254 s, 143 MB/s
if=
で入力ファイル(input file)を指定します。この例では /dev/zero
デバイスを指定していますから、NULL
文字が無限に読み込まれます。of=
で出力ファイル(output file)を指定します。bs=
は1回に読み出すデータブロックのサイズ(block size)で、ここでは1MBを指定しています。count=
はデータブロックを読み込む回数です。ここでは1024回を指定していますから、1MBを1024回読み出して1GBになります。つまり、1GBのファイル myswap
が作成されます。
# mkswap myswap Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=49c53bc4-c4b1-4a8b-a613-8f42cb275b2b # swapon myswap
上のコマンドを実行すると、myswap
ファイルがスワップ領域として利用され始めます。再起動しても myswap
ファイルは存在していますが、自動的にスワップ領域として使われるようになるわけではありません。/etc/fstab
にスワップファイルの設定を加えることで自動的にスワップファイルとして使えるようにできます(トピック104.3で説明します)。
Tip
|
|
演習
-
3TBのハードディスクに1GBの3つのパーティションを作成する場合、GPTとMBRのどちらを使うべきでしょうか? 理由とともに答えてください。
-
gdisk
コマンドでディスクの空き領域を表示してください。 -
/dev/sdc1
デバイスに、ランダムなUUIDで、「MyDisk」というラベルを付けて、不良ブロックのチェックをしてから、ext3ファイルシステムを作成してください。 -
parted
コマンドで、ディスクの500MBの位置から開始する300MBのext4パーティションを 作成してください。 -
/dev/sda1
と/dev/sda2
にそれぞれ20GBのパーティションがあるとします。これら2つのパーティションを、ミラーリング冗長化(Raid1相当)する1つのBtrfsファイルシステムにしてください。そのファイルシステムのサイズも答えてください。
発展演習
-
次のようなMBRパーティションテーブルの2GBのディスクがあるとします。
Disk /dev/sdb: 1.9 GiB, 1998631936 bytes, 3903578 sectors Disk model: DataTraveler 2.0 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: 0x31a83a48 Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 1050623 1048576 512M 83 Linux /dev/sdb3 2099200 3147775 1048576 512M 83 Linux
600MBのパーティションを作成できますか? 理由も示してください。
-
/dev/sdc
ディスクの最初に1GBのパーティションがあり、ext4ファイルシステムで241MBのファイルが入っています。parted
コマンドでこのファイルがぴったり収まるサイズにパーティションを縮小してください。 -
/dev/sdb
ディスクの最初に1GBのパーティションを作成しました。具体的には、parted /dev/sdb
を実行してからmkpart primary linux-swap 0 1024M
を実行してパーティションを作成しました。次に、このパーティションをスワップパーティションとして使うためにswapon /dev/sdb1
コマンドを実行したところ、次のエラーメッセージが表示されました。swapon: /dev/sdb1: read swap header failed
何が問題だったのでしょうか?
-
parted
コマンドで誤ってハードディスク上の3番目のパーティションを削除してしまったとします。その3番目のパーティションは、250MBのEFIパーティションと4GBのスワップパーティションの後にあり、10GBのサイズだということはわかっています。parted
コマンドでその3番目のパーティションを復元してください。 -
/dev/sda3
に4GBの未利用のパーティションがあるとします。fdisk
コマンドを使用してこのパーティションをスワップパーティションとして使えるようにする一連の操作を実行してください。
まとめ
このレッスンでは、次のことを学びました。
-
fdisk
コマンドによるMBRパーティションテーブルの作り方とパーティションの作成及び削除 -
gdisk
コマンドによるGPTパーティションテーブルの作り方とパーティションの作成及び削除 -
ext2、ext3、ext4、XFS、VFAT、exFATタイプのパーティションの作り方
-
parted
コマンドによるMBRとGPTパーティションの作成、削除、復元 -
ext2、ext3、ext4タイプのパーティションのリサイズ
-
スワップパーティションとスワップファイルの作成及び設定
このレッスンでは、次のコマンドを説明しました:
-
fdisk
-
gdisk
-
mkfs.ext2
、mkfs.ext3
、mkfs.ext4
、mkfs.xfs
、mkfs.vfat
、mkfs.exfat
-
parted
-
btrfs
-
mkswap
-
swapon
、swapoff
演習の解答
-
3TBのハードディスクで1GBの3つのパーティションを作成する場合、GPTとMBRのどちらを使うべきでしょうか? 理由とともに答えてください。
GPTです。MBRは2TBのハードディスクまでしかサポートしないので不適です。
-
gdisk
コマンドでディスクの空き領域を表示してください。p
コマンドを実行します。パーティションテーブルの情報の前にディスクの空き領域が表示されます。 -
/dev/sdc1
デバイスに、ランダムなUUIDで、「MyDisk」というラベルを付けて、不良ブロックのチェックをしてから、ext3ファイルシステムを作成してください。mkfs.ext3 -c -L MyDisk -U random /dev/sdc1
コマンドを実行します。mkfs.ext3
の部分はmke2fs -t ext3
でも構いません。 -
parted
コマンドで、ディスクの500MBの位置から開始する300MBのext4パーティションを 作成してください。parted
コマンドを実行すると起動するプロンプトで、mkpart primary ext4 500m 800m
コマンドを実行します。parted
コマンドはファイルシステムを作成しませんから、mkfs.ext4
コマンドを実行してファイルシステムを作成することを忘れないでください。 -
/dev/sda1
と/dev/sda2
にそれぞれ20GBのパーティションがあるとします。これら2つのパーティションを、ミラーリング冗長化(Raid1相当)する1つのBtrfsファイルシステムにしてください。そのファイルシステムのサイズも答えてください。mkfs.btrfs /dev/sda1 /dev/sdb1 -m raid1
コマンドを実行します。ミラーリングなのでファイルシステムのサイズは20GBになります。
発展演習の解答
-
次のようなMBRパーティションテーブルの2GBのディスクがあるとします。
Disk /dev/sdb: 1.9 GiB, 1998631936 bytes, 3903578 sectors Disk model: DataTraveler 2.0 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: 0x31a83a48 Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 1050623 1048576 512M 83 Linux /dev/sdb3 2099200 3147775 1048576 512M 83 Linux
600MBのパーティションを作成できますか? 理由も示してください。
作成できません。連続した空き領域が足りないからです。デバイスのリストを見れば何かが欠けていることがわかります。
/dev/sdb1
と/dev/sdb3
があるのに/dev/sdb2
がありません。次にパーティションの開始位置と終了位置を見ます。パーティション1は
1050623
セクターで終了しており、パーティション2は2099200
セクターから開始しています。2099200 − 1050623の1048577セクターの隙間があります。1セクターは512バイトですから、これは512 × 1048577で536,871,424バイトとなります。1024で割ってキロバイト単位にするなら524,288KBです。さらに1024で割ると512MBだとわかります。これが「隙間」のサイズになります。ディスクは2GBですから、パーティション3の後にあるのは最大でも512MBです。トータルでは約1GBの未割り当ての空き領域があるとしても、最大の連続する空き領域は512MBですから、600MBのパーティションを作成するには足りません。
-
/dev/sdc
ディスクの最初に1GBのパーティションがあり、ext4ファイルシステムで241MBのファイルが入っています。parted
コマンドでこのファイルがぴったり収まるサイズにパーティションを縮小してください。2段階に分けて考えます。1段階目では
resize2fs
コマンドでファイルシステムを縮小します。縮小後のサイズを直接指定せずに-M
パラメータを使うとファイルがぴったり収まるサイズに縮小できます。resize2fs -M /dev/sdc1
コマンドを実行するということです。2段階目では
resizepart
コマンドでパーティションの縮小をします。ディスク上で最初のパーティションですから、1から始まり241MBで終わるようにします。resizepart 1 241M
コマンドを実行するということです。 -
/dev/sdb
ディスクの最初に1GBのパーティションを作成しました。具体的には、parted /dev/sdb
を実行してからmkpart primary linux-swap 0 1024M
を実行してパーティションを作成しました。次に、このパーティションをスワップパーティションとして使うためにswapon /dev/sdb1
コマンドを実行したところ、次のエラーメッセージが表示されました。swapon: /dev/sdb1: read swap header failed
何が問題だったのでしょうか?
パーティションを適切なタイプ(
linux-swap
)で作成していますが、mkpart
はパーティションを作成するだけです。mkswap
コマンドでそのパーティションをスワップ領域として初期化していなかったことが問題でした。 -
parted
コマンドで誤ってハードディスク上の3番目のパーティションを削除してしまったとします。その3番目のパーティションは、250MBのEFIパーティションと4GBのスワップパーティションの後にあり、10GBのサイズだということはわかっています。parted
コマンドでその3番目のパーティションを復元してください。パーティションを復元するのに十分な情報は手元にありますから、落ち着いて計算して(
parted
のプロンプトで)rescue
コマンドを実行しましょう。復元するパーティションの前には250MB + 4.096 MB(4 × 1024)がありますから、開始位置はおよそ4346MBです。復元するパーティションのサイズである10,240MB(10 × 1024)を加えた14,586MBが終了位置です。よって、rescue 4346m 14586m
コマンドで復元できます。開始位置を少し前に、終了位置を少し後にして余裕を持たせてもよいでしょう。 -
/dev/sda3
に4GBの未利用のパーティションがあるとします。fdisk
コマンドを使用してこのパーティションをスワップパーティションとして使えるようにする一連の操作を実行してください。まず、
fdisk /dev/sda
を実行してプロンプトを起動し、t
、3
、82
、w
と順に入力してそのパーティションタイプをLinux Swap
にして、変更を書き込んで終了します。次にmkswap /dev/sda3
コマンドでそのパーティションをスワップ領域に初期化します。そしてswapon /dev/sda3
を実行すれば、そのパーティションをスワップパーティションとして使えるようになります。