Linuxのパーティションとファイルシステムとマウント | 若手エンジニアのブログ

若手エンジニアのブログ

文系出身の若手女子エンジニアによる技術ブログ。
日々の経験や学びをアウトプットするためにブログを書いています。
バックエンド(Java+SpringFramework)を経てインフラエンジニアになりました。
今は育休中につき、本で勉強したことを中心にアウトプットしています。

以前にも似たような記事(めちゃ雑なやつ)を書いたのですが、

今回改めて体系的に勉強したので、Linuxのディスク活用の基礎、

すなわち、パーティション分割とファイルシステムについて、概要と管理方法をまとめたいと思います。

 

ボリュームは次回記事で扱う予定。

 

1.Linuxの物理ディスク活用のしくみ

2.パーティション作成

3.ファイルシステム作成

4.マウント

 

1.Linuxの物理ディスク活用のしくみ

■概要

Linuxでは、1つの物理ディスク(外部記憶装置。ハードディスクやSSDなど)を、論理的に分割して、

あたかも複数のディスクを用いているようにする技術が使われている。

(RedHat系の場合、何も意識しないでOSをインストールすると、勝手に分割されている)

Windowsでいうドライブ(CドライブとかDドライブとか)をイメージすると分かりやすいかも。

 

図で表すとこんなかんじ。

上記の場合、物理ディスクは1つであり、従って本来は1つの記憶空間であるはずである。

けれども論理的に分割して、3つの記憶空間を作り出すことで、

あたかも別の3つの物理ディスクを使っているように見せかけている。

3つの空間は、それぞれ用途に合わせて使い分けている。

 

なお、分割後の1つ1つの空間領域を、パーティションと呼ぶ。

Linuxでは、このようなパーティションの技術が利用されている。

 

 

■分割の理由

ではなぜパーティションに分割するのか?

分割のメリットは以下のようなものが挙げられる。

 

 ・管理単位が小さくなるため、パーティションの1つが仮に壊れても、他パーティションへの影響を抑えることができる

 ・重要情報を含むパーティションだけをバックアップするといった、システムに合わせた柔軟な利用が可能となる

 ・サーバのサービス開始後に増加するデータ(ログ、DBデータ等)を見越して、それらデータ専用のパーティションを設けておくことで、容量圧迫による他パーティション内のファイルへの影響を避けられる

 ・用途に応じてファイルシステム(説明後述)の種類を使い分けることができる

 

要は、物理ディスクをそのまま1個の領域として使うよりも、

分割して使ったほうが柔軟かつ安全にディスクを使えるよ、という話。

 

■分割から活用までの全体像

次に、実際にパーティション分割を行う手順を見ていく。

 

実は、ディスクを分割してパーティションを作るだけでは、

そのパーティション内にファイルやディレクトリを配置・利用することができない。(ハコを作ったけどフタを開けられない状態)

そのため、ディスクを分割して実際に利用できるようにするためには、以下の3手順が必要となる。

 

 ①物理ディスクをパーティションに論理的に分割する

 (RedHatの場合、ここでさらにボリュームと呼ばれる領域を作成することがある。詳細は後日。)

 ②各パーティション内にファイルシステムをつくる

 ③パーティションをマウントする

 

 

ディスク分割~利用までの基本となる、①~③の手順について、それぞれ見ていく。

 

2.パーティション

まずは物理ディスクを、パーティションに分割する。

 

 ①物理ディスクをパーティションに論理的に分割する ←ここの話

 ②各パーティション内にファイルシステムをつくる

 ③パーティションをマウントする

 

分割の方法は、OSが対応しているパーティション形式によって変わってくるので、

先に形式を紹介する。

 

■パーティション形式の種類

Linuxのパーティション形式は2種類ある。

①MBR(別名: MS-DOS)

旧式のパーティション形式。

最大4つの通常パーティションを作成できるほか、

うち1つは、パーティションの中にさらにパーティションを持てる、拡張パーティションも作成できる。

 

②GPT

パワーアップした形式。

MBRに比べて、作成できる最大容量が大幅に上がっている(10の6乗倍くらい)。

また作成できるパーティション数も、512セクタの場合、デフォルトで最大128になっている。

(ただ、そんなにハイスペックにしても最大まで使うことはまず無いと思う。パーティション128個も作ったらむしろ管理大変そうw

そして容量はZB(ゼットバイト)単位らしいけどZBとか初めて聞いた…w 10の18乗KBにあたる単位とのこと。)

 

■OSが対応しているパーティション形式の確認方法

MBRとGPTについて、どちらがOSで利用されているかを確認する。

確認には、MBR、GPT両形式で利用できる、パーティション管理のためのコマンドpartedを用いる。

 $ parted -l
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 16.1GB
Sector size (logical/physical): 512B/512B

Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system     Flags
 1      1049kB  316MB   315MB   primary  ext4            boot
 2      316MB   1926MB  1611MB  primary  linux-swap(v1)
 3      1926MB  16.1GB  14.2GB  primary  xfs

 

出力される"Partition Table"の値が、msdos(MBR)とgptのどちらになっているかを確認する。

上の場合はMBR形式が採用されている。

 

なおGPTに対応しているOSであれば、デフォルトでMBRを用いていても、

GPT形式に切り替えることが可能。また反対に、GPT形式をMBRに切り替えることも可能。

(RedHatは少なくともバージョン6以降対応していることは公式ドキュメントから確認済)

 

 

■MBR形式でのみ使える、パーティションの分割や確認方法

ということで、前置きが長くなったが、パーティション分割の方法(コマンド)を紹介していく。

まずはMBR形式でのみ使えるコマンドをご紹介。

 

MBR形式では、fdiskというコマンドを用いて、パーティション管理が可能である。

基本のコマンドは以下の通り。

 $ fdisk [オプション] デバイス名

※デバイス名は、物理ディスクのデバイスファイルのことを指す。

デバイスファイルは、デバイス(周辺機器。ここでは物理ディスク)を追加すると自動的に作成される管理ファイルのこと。ファイル名はデバイスの規格や何番目に接続したデバイスかによって変わってくる。

一般的な規格の1つであるSATAであれば、/dev/sd〇という名称になる。例えば、SATA接続の1つ目のデバイスは/dev/sda、2つ目は/dev/sdbとなる。

 

コマンドを実行すると、対話形式でパーティションを管理できるようになる。

$ fdisk /dev/sda

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


Command (m for help):

 

対話形式が開始されると、命令はfdisk独自のコマンドによって行うことになる。

上記の最後の行に"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

※各コマンドの中でも、特によく使うと思われるものにはオレンジで注釈をつけた。

 

実践も載せたかったけど、諸事情によりできず。。m(__)m

fdiskの実際の使い方はググれば大量に出てくるのでそれ見てください。

 

※重要※

パーティション設定変更後、"w"を指定して設定変更の保存をすると、直ちに変更内容が適用される。

パーティション分割はディスク活用において重要なものであるため、

間違えると大変なことになる。バックアップをとるなどしてから、分割することをお勧めする。

以降のパーティション管理コマンド実行時も同様。

 

■GPT形式でのみ使える、パーティションの分割や確認方法

GPT形式では、fdiskに代わり、gdiskというコマンドを用いて、パーティションを分割する。

fdiskと同様、対話形式でのパーティション管理が可能である。

細かい違いはあれど、fdiskコマンドと似たようなかんじで利用できるので、詳細説明は割愛。

$ gdisk /dev/sda  # コマンド実行
GPT fdisk (gdisk) version 1.0.3

Partition table scan:  
# この表示内容からも、利用しているパーティション形式を確認できる
  MBR: MBR only 
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************


Warning! Secondary partition table overlaps the last partition by
33 blocks!
You will need to delete this partition or resize it in another utility.

Command (? for help):     
 #対話形式でコマンドを実行可能。ヘルプは"?"で表示する。

 

 

■MBR、GPTの両形式で使える、パーティションの分割や確認方法

上で紹介したfdiskコマンドはMBR形式、gdiskコマンドはGPT形式でしか使えないが、

MBR、GPTのどちらの形式であっても、パーティション管理に利用できるコマンドも存在する。

partedコマンドと、gpartedコマンドである。

 

partedコマンドは、基本機能はfdisk、gdiskと大差なく利用できるほか、無くなったパーティションの回復やパーティションサイズの調整といった拡張的な機能も利用できるようになっている。

 

gpartedコマンドは、GUIでパーティション管理をするためのコマンドとなる。(従って利用時にはデスクトップ画面が必要となる)

ただGUI操作ではログが残らなかったり、プルダウンなどの選択・クリックを押し間違える危険が大きかったりするため、個人的にはお勧めしない。

 

↓partedコマンド実行の様子。

 $ parted /dev/sda

GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands. 
# ヘルプはhelpコマンドを実行
(parted)     # ←ここから対話形式が始まる

 

 

以上がパーティション分割の形式と、形式ごとの分割方法である。

 

3.ファイルシステム

続いて、作ったパーティションへファイル等の配置・利用を可能にするために、

ファイルシステムを適用していく必要がある。

 

 ①物理ディスクをパーティションに論理的に分割する

 ②各パーティション内にファイルシステムをつくる  ←ここの話。

 ③パーティションをマウントする

 

■ファイルシステムとは

ファイルやディレクトリなどの、OS上の物理データ・リソースを管理する機能のこと。

分かりづらければ「ファイルを作るために必要なやつ」と思っておけばOK。

 

ちょっと語弊があるかもだが、建物に例えると、

パーティションが骨組み部分、ファイルシステムは人が住めるようにするための床の準備、というイメージが近い(と思う)。

 

なお、図にもあるとおり、ファイルシステムには様々な種類が用意されており、

どの種類のファイルシステムを使うのかを検討する必要がある。

 

具体的な種類については、RedHat8のドキュメントに、主要なファイルシステムの一覧が載っていたのでURLを貼っておく。

 

■ファイルシステムの作り方

どの種類のファイルシステムを作るかによって、利用するコマンドが変わってくる。

以下に、RedHatのデフォルトでも利用されている、xfsという名前のファイルシステムを作るコマンドを紹介する。

 $ mkfs.xsf [オプション] デバイス名(=パーティション名)

 

実行例は以下の通り。

 $ mkfs.xsf /dev/sda3

 

これでOK。

 

 

4.マウント

作ったパーティション(ファイルシステムも作った状態)を実際に利用するための最後の手順として、

パーティションのマウントが必要になる。

 

 ①物理ディスクをパーティションに論理的に分割する

 ②各パーティション内にファイルシステムをつくる

 ③パーティションをマウントする  ←ここの話。

 

■マウントとは

パーティションを、ディレクトリに接続して使えるようにする作業のこと。

パーティションとファイルシステムの作成は、あくまでもハコを作っただけであり、

ハコを実際にディレクトリに認識させることで、ハコを利用できるようにするのである。

 

■コマンド

書式は以下の通り。

 $ mount [オプション] デバイス名 マウント先(パーティションを接続したい)ディレクトリ名

 

 

 

以上の流れで、Linuxではじめてファイルを配置・管理できるようになる。

 

 

最後駆け足になってしまった…(^-^; 今回は以上!