初心者がファイルシステムを扱う(´・ω・`)


この記事について

対象
対象:IT初心者しょぼん君:(´・ω・`)
▶︎ 初心者向け、イメージを掴むキッカケになることが目的の記事
▶︎ 砕いた理解で、一部正確ではない場合があります。

しょぼん君のぼやき
しょぼん君:(´・ω・`)『Linuxでのディスク追加するよ』

はじめに

今回Linuxでディスクを追加を実施するための前提知識を整理して実施します。

ファイルシステムについて

ファイルシステムは、HDDなどの記憶媒体を効率的に管理して、ファイルとして利用するための手段を提供する基本的なOSのサービスの1つです。大抵の場合、ディスク追加をするとはファイルシステムとして利用できるようにすることを指します。

しょぼん君:(´・ω・`)『データをファイルとしてい扱えるのは、ファイルシステムのおかげなんだね』

普段、ファイルシステムの種類について触れる機会はありませんが、Linuxだけでも「ext2,ext3,ext4,xfs...」などがあります。現在、Linuxでのデファクトスタンダードは、ext3の拡張である ext4 です。

ext4
最大ファイルサイズは16TiB, 最大ボリュームサイズは1EiB
日付範囲は、1901年12月14日から2514年4月25日まで

ファイルシステムでは、ベースとなるVFS(Virtual File System:仮想ファイルシステム)という仕組みで、記憶媒体のパーテーションをどのファイルシステムで管理しているのか判断してコントロールしたり、バックグラウンドでのアクセス権確認や書き込み待ち判断などのファイル処理も行っています。

パーテーションは、物理的な記憶媒体の領域を論理的な領域に分割した中の1つの領域のことです。

しょぼん君:(´・ω・`)『パーテーションごとにファイルシステムで管理しているのかぁ』

ディスクの追加などで新たな記憶媒体をファイルシステムとして利用するには、パーテーションを割り当てて、フォーマットをする必要があります。

パーテーションの割り当て

パーテーションを割り振るために、追加した記憶媒体が認識されてデバイス名が割り振られていることを確認してみましょう。

Linuxでは、ハードディスクのデバイス名は、/dev/sd* のように認識されます。

パーテーション情報の確認.
$ sudo fdisk -l

Disk /dev/xvdb: 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: 0x00025cdb             

Device     Boot Start     End Sectors Size Id Type              
/dev/xvdb1         63 4192964 4192902   2G 82 Linux swap / Solaris              


Disk /dev/xvda: 25 GiB, 26843701248 bytes, 52429104 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: 0xe8275ee7             

Device     Boot  Start      End  Sectors  Size Id Type              
/dev/xvda1 *      2048   526335   524288  256M 83 Linux             
/dev/xvda2      526336 52428799 51902464 24.8G 83 Linux             


Disk /dev/xvdc: 100 GiB, 107374182400 bytes, 209715200 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               

ファイルシステムとして利用されているディスクには、パーテーション情報が存在します。
/dev/xvda を例にすると、以下です。

これら情報がないディスクが今回追加したディスクになるため、上記の例では一番下の Disk /dev/xvdc が新たに認識されたディスクのデバイス名になります。追加したディスクサイズも合わせて参照し、同ディスクであることを確認しましょう。今回は100GBのディスクを追加しました。

現在利用しているディスクのデバイス名は以下コマンドでも確認出来ます。以下に含まれないことも確認したら良いかもしれませんね。

ディスクの空き領域確認.
$ df -h

新たに追加したディスクをファイルシステムとして利用するためには、まずパーテーションを設定する必要があります。

しょぼん君:(´・ω・`)『ファイルシステムはパーテーションごとだからだね』

パーテーションの作成は以下コマンドから対話型で設定します。

パーテーションの作成.
$ sudo fdisk /dev/xvdc

### 以下が表示されたタイミングでキーを入力。どんなキーがあるかは m でhelpが見られる
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
   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

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

  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


### 設定前のパーテーション情報を表示
Command (m for help): p                 
    Disk /dev/xvdc: 100 GiB, 107374182400 bytes, 209715200 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: 0x144852f7 

### パーテーションの作成( 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)

### パーテーションのタイプを選択(今回はデフォルトのpromary)
Select (default p): p

###パーテーションの数を選択(デフォルトのままEnter)
Partition number (1-4, default 1): 

###サイズの設定(デフォルトのままEnter)
First sector (2048-209715199, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-209715199, default 209715199):      


### パーテーション情報を確認
Command (m for help): p                 
    Disk /dev/xvdc: 100 GiB, 107374182400 bytes, 209715200 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: 0x144852f7             

    Device     Boot     Start       End Sectors  Size Id Type               
    /dev/xvdc1      209715199 209715199       1  512B 83 Linux                                          
### 終了
Command (m for help): q

これで追加ディスクを、1つの領域で利用するパーテーションを作成出来ました。

フォーマット(論理)

続いて、フォーマットを行ってパーティション上にファイルシステムを適用します。これを論理フォーマットと言います。記憶媒体を記憶媒体として利用するためのフォーマットを物理フォーマットと言いますが、これとは異なります。

論理フォーマットではデータを消すのではなくファイルシステムの管理情報を書き直します。

論理フォーマット.
$ mkfs -t ext4 /dev/xvdc1       

しょぼん君:(´・ω・`)『追加したディスクをファイルシステムとして利用する準備が出来た訳だね。』

マウント

実際にファイルシステムとして利用するためには、作成したパーテーションをマウントする必要があります。

Linux は、/ (ルート) ディレクトリを頂点としたツリー構造のディレクトリ構成をしていますが、マウントとは、基本的にはファイルシステムとして利用可能なパーテーションを / ディレクトリの一部となるようにすることを言います。

イメージが湧きづらいかと思うので図にしてみました。
例えば、/mntに今回追加したディスクをマウントするイメージは以下です。

マウントのコマンドは以下です。
一時マウントでマウント可能か確認し、永続マウントの設定をしてみました。

一時マウント.
$ sudo mount /dev/xvdc1 /mnt --types=ext4 --option=rw
マウントの確認.
$ df -hT
<font color="DeepSkyBlue">**しょぼん君:(´・ω・`)**</font color>『ファイルシステムとして追加ディスクが使えるようになった!』

再起動されてもマウントされるように /etc/fstab に追記をします。

```永続マウント.
$ sudo vi /etc/fstab
### 以下を追記
/dev/xvdc1 /mnt ext4   defaults       0 0

fstabの書き方の例

しょぼん君:(´・ω・`)『今まで意識していなかったけど、今後は今どこのパーテーションを使ってるのか意識出来そうな気がする』

今回のディスク追加では、1つの物理デバイスの中でパーテーションを区切り、フォーマットしてマウントしました。この他にも、複数のデバイスを1つのボリュームとして考え、区切り、マウントする方法もあったりします。それはまた機会があれば...

END