ファイルシステムとディスク管理

LinuxBeginner
オンラインで実践に進む

はじめに

Linux におけるファイルシステムとディスク管理の実験へようこそ!この実験は、Linux システム管理の世界を探索し始めたばかりの初心者を対象としています。ディスク容量の管理、仮想ディスクの作成、ファイルシステムの保守に関する不可欠なコマンドと概念を順を追って説明します。この実験を終える頃には、基本的な Linux ディスク管理ツールの実践的な経験を積んでいるはずです。

df によるディスク使用量の確認

df (disk free) コマンドは、Linux システム上のディスク容量の使用状況を確認するための定番ツールです。その使い方を見ていきましょう。

  1. ターミナルを開きます。現在は /home/labex/project ディレクトリにいるはずです。確信が持てない場合は、いつでも pwd コマンドで現在のディレクトリを確認できます。

  2. 次のコマンドを実行して、ディスクの使用状況を表示します。

    df
    

    次のような出力が表示されます。

    Filesystem     1K-blocks      Used Available Use% Mounted on
    overlay         20971520    128744  20842776   1% /
    tmpfs              65536         0     65536   0% /dev
    tmpfs            3995004         0   3995004   0% /sys/fs/cgroup
    shm                65536         0     65536   0% /dev/shm
    /dev/vdb       104806400  57754052  47052348  56% /etc/hosts
    

    最初は複雑に見えるかもしれませんが、心配いりません。各項目の意味を解説します。

    • Filesystem: ディスクまたはパーティションの名前です。
    • 1K-blocks: 1 キロバイト(KB)ブロック単位でのファイルシステムの総容量です。
    • Used: 現在使用されている容量です。
    • Available: 残りの空き容量です。
    • Use%: ファイルシステムの使用率(パーセンテージ)です。
    • Mounted on: ファイルシステムがディレクトリツリーのどこにマウント(接続)されているかを示します。
  3. 次に、この出力をより人間が読みやすい形式にしてみましょう。以下を実行します。

    df -h
    

    -h オプションは「human-readable(人間が読みやすい)」の略です。次のような出力が表示されます。

    Filesystem      Size  Used Avail Use% Mounted on
    overlay          20G  126M   20G   1% /
    tmpfs            64M     0   64M   0% /dev
    tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
    shm              64M     0   64M   0% /dev/shm
    /dev/vdb        100G   56G   45G  56% /etc/hosts
    

    ずっと分かりやすくなりましたね。サイズが GB や MB で表示されるため、直感的に理解しやすくなります。

  4. 特定のファイルシステムの容量を確認したい場合は、パスを指定できます。

    df -h /dev/vdb
    

    これにより、/dev/vdb ファイルシステムの情報のみが表示されます。

df コマンドは、残りのディスク容量を素早く確認するのに非常に便利です。システムから「容量が不足しています」という警告が出た場合、調査のために最初に使うべきコマンドは多くの場合 df です。

du によるディレクトリサイズの調査

df はディスク使用量の全体像を把握するのに役立ちますが、時にはより詳細な調査が必要になります。そこで登場するのが du (disk usage) コマンドです。これは、どのディレクトリやファイルが最も多くの容量を占有しているかを理解するのに役立ちます。

  1. まずは、最もシンプルな形式で du を使ってみましょう。以下を実行します。

    du ~
    

    数字とディレクトリ名の長いリストが表示されます。各数字は、そのディレクトリのサイズをキロバイト単位で表しています。これでは情報が多すぎるため、整理してみましょう。

  2. より読みやすい出力にするには、-h オプションを使用します。

    du -h ~
    

    df と同様に、-h オプションによってサイズが KB、MB、GB などの適切な単位で表示されます。

  3. 多くの場合、ディレクトリの合計サイズだけを知りたいことがあります。その場合は次のようにします。

    du -sh ~
    

    ここで、-s は「summarize(要約)」を意味し、~ はホームディレクトリを表します。このコマンドは、ホームディレクトリ内のすべての合計サイズを表示します。

  4. ホームディレクトリ直下のサブディレクトリのサイズを確認するには、次のようにします。

    du -h --max-depth=1 ~
    

    これにより、1 階層下の各サブディレクトリのサイズが表示されます。--max-depth=1 オプションは、du がサブディレクトリをどこまで深く探索するかを制限します。

  5. ホームディレクトリ内の各項目のサイズを確認してみましょう。

    du -sh ~/*
    

    これにより、ホームディレクトリ直下にある隠しファイル以外の各ファイルとディレクトリのサイズが表示されます。

  6. ホームディレクトリ内で最も大きな項目を見つけるための強力なコマンドを紹介します。

    du -h ~ | sort -rh | head -n 10
    

    このコマンドの仕組みを解説します。

    • du -h ~: ホームディレクトリ内のすべてのファイルとディレクトリをサイズ付きでリストアップします。
    • sort -rh: このリストを逆順(大きい順)かつ人間が読みやすい形式でソートします。
    • head -n 10: 出力の最初の 10 行だけを表示します。
    • |: パイプと呼ばれ、あるコマンドの出力を次のコマンドの入力として渡します。

    このコマンドは、単純な Linux コマンドを組み合わせて複雑な操作を行う素晴らしい例です。

du コマンドは、ディスク容量を解放しようとする際に非常に貴重なツールです。どのディレクトリやファイルが場所を取っているかを特定できるため、どこを重点的に整理すべきかが分かります。

仮想ディスクの作成と管理

作業に入る前に、仮想ディスクとは何かを理解しましょう。仮想ディスクとは、物理的なディスクドライブのように動作する単なる「ファイル」のことです。オペレーティングシステム(OS)が本物のハードドライブであるかのように扱えるコンテナファイルを作成すると考えてください。これは、仮想マシンがデータを保存するために仮想ディスクファイルを使用する仕組みと似ています。

なぜこのようなことをするのでしょうか?仮想ディスクは以下の用途に役立ちます。

  • 本物のハードウェアを危険にさらすことなく、ディスク操作を安全にテストする
  • 隔離されたストレージ領域を作成する
  • 追加の物理ハードウェアを用意せずにディスク管理について学ぶ
  • 実際のディスクのバックアップイメージを作成する

重要な概念の理解

実践に進む前に、いくつかの重要な概念を理解しておきましょう。

  1. ファイルシステム (Filesystem): ファイルシステムは、ディスク上のファイルやフォルダを整理する方法だと考えてください。オフィスのファイリングシステムのようなもので、データの保存方法や取り出し方を決定します。一般的な Linux ファイルシステムには、ext4(今回使用するもの)、XFS、btrfs などがあります。

  2. マウント (Mounting): マウントとは、ファイルシステムを OS からアクセスできるようにするプロセスです。ファイルシステムをマウントするとき、Linux に対して「このディスクの内容を、この特定のディレクトリで見えるようにしてくれ」と指示していることになります。これは以下のような流れに似ています。

    • USB メモリを差し込む(物理的な接続)
    • コンピュータのどこにその内容を表示するかを決定する(マウントポイント)
  3. パーティション (Partitions): パーティションは、ディスクを独立した単位として扱うための区切りです。大きなハードドライブを、より小さく独立したセクションに分割するようなものです。パーティショニングを行う理由には以下があります。

    • システムファイルとユーザーファイルを分離する
    • 用途に応じて異なるファイルシステムを使用する
    • バックアップを容易にする
    • ディスク障害の影響を限定的にする

それでは、仮想ディスクを作成して操作してみましょう。

  1. まず、dd コマンドを使用して 256MB の仮想ディスクを作成します。

    dd if=/dev/zero of=virtual.img bs=1M count=256
    

    このコマンドを分解して説明します。

    • dd: ファイルのコピーと変換を行うユーティリティです。
    • if=/dev/zero: 「入力ファイル(input file)は /dev/zero」という意味です(無限にゼロを供給する特殊なファイルです)。
    • of=virtual.img: 「出力ファイル(output file)は virtual.img」という意味です(これが新しい仮想ディスクファイルになります)。
    • bs=1M: ブロックサイズを 1 メガバイトに設定します(一度にコピーするデータの量)。
    • count=256: 256 個のブロックをコピーします(結果として 256MB のファイルになります)。

    これにより、仮想ディスクとして使用するための、ゼロで埋められた空のファイルが作成されます。

  2. ファイルサイズを確認します。

    ls -lh virtual.img
    

    virtual.img が正確に 256MB であることが確認できるはずです。

  3. 次に、この仮想ディスクを ext4 ファイルシステムでフォーマットします。

    sudo mkfs.ext4 virtual.img
    

    ここで何が起きているのでしょうか?このコマンドは以下のことを行います。

    • 仮想ディスクファイルの中に新しい ext4 ファイルシステムを作成します。
    • ファイルやディレクトリを保存するために必要な基本構造をセットアップします。
    • これは、新しい USB メモリを最初に使用する前にフォーマットする操作と同じです。

    ext4 ファイルシステムは、信頼性が高く十分にテストされているため、多くの Linux ディストリビューションでデフォルトとして採用されています。

  4. 次に、マウントポイントを作成する必要があります。これは、仮想ディスクの内容が表示されるディレクトリです。

    sudo mkdir /mnt/virtualdisk
    

    マウントポイントは、仮想ディスクの中を覗くための「窓」だと考えてください。マウントした後、このディレクトリの中を見ると、実際には仮想ディスクの内容を見ていることになります。

  5. これで仮想ディスクをマウントできます。

    sudo mount -o loop virtual.img /mnt/virtualdisk
    

    何が起きているか分解してみましょう。

    • -o loop オプションは、ファイルを本物のディスクデバイスであるかのように扱うよう Linux に指示します。
    • virtual.img はソース(作成した仮想ディスク)です。
    • /mnt/virtualdisk は内容を表示させたい場所です。

    これは USB メモリを差し込んだときに自動的に行われる処理と似ていますが、ここでは仮想ディスクファイルを使って手動で行っています。

  6. ディスクがマウントされているか確認します。

    mount | grep virtualdisk
    

    virtual.img/mnt/virtualdisk にマウントされていることを示す行が表示されるはずです。

  7. マウントされたので、他のディレクトリと同じように使用できます。ファイルを一つ作成してみましょう。

    sudo touch /mnt/virtualdisk/testfile
    ls /mnt/virtualdisk
    

    testfile がリストに表示されるはずです。

  8. 仮想ディスクの使用が終わったら、アンマウント(マウント解除)する必要があります。

    sudo umount /mnt/virtualdisk
    

    アンマウントすると、そのディレクトリからファイルシステムが切り離されます。これにより、OS は切り離す前に保留中のすべての読み書き操作を確実に完了させます。正しくアンマウントしないと、データが破損する可能性があります。コマンドの構文はディレクトリのアンマウントに焦点を当てていますが、内部では OS がそのディレクトリに対応するマウントされたディスクイメージを認識しています。

仮想ディスクを作成、フォーマット、マウントするこのプロセスは、新しいハードドライブや USB メモリを接続したときに起こることと非常によく似ています。主な違いは、物理デバイスの代わりにファイルを使用してすべてを行っている点です。

ファイルシステムをマウントするということは、OS がファイルシステム内のデータにアクセスできるように、指定されたディレクトリにそれを接続することを意味します。この実験では、仮想ディスクイメージファイルが物理ディスクであるかのように扱われ、マウントによってその内容が特定のディレクトリ(例:/mnt/virtualdisk)で利用可能になります。

fdisk によるディスクパーティションの管理

実際のシステムでは、ファイルシステムを作成する前に、まずパーティションを作成する必要があることがよくあります。この仮想環境では実際のディスクパーティションを変更することはできませんが、fdisk を使用してパーティション情報を表示する方法を学ぶことができます。

  1. まず、すべてのディスクパーティションに関する情報を表示してみましょう。

    sudo fdisk -l
    

    これにより、すべてのディスクデバイスとそのパーティションに関する情報が表示されます。ディスクサイズ、セクタ数、パーティションテーブルなどの詳細を確認できます。

  2. 次に、作成した仮想ディスクのパーティション情報を見てみましょう。

    sudo fdisk -l virtual.img
    

    これにより、仮想ディスクのパーティションテーブルが表示されます。今回はパーティショニングを行わずにディスクイメージに直接ファイルシステムを作成したため、有効なパーティションテーブルが含まれていないというメッセージが表示される場合があります。

実際のシステムでは、fdisk を対話的に使用してパーティションの作成、削除、変更を行います。その仕組みの概要は以下の通りです。

  • sudo fdisk /dev/sdXfdisk を起動します(X はパーティションを作成したいディスクの適切な文字に置き換えます)。
  • n コマンドで新しいパーティションを作成します。
  • d コマンドでパーティションを削除します。
  • t コマンドでパーティションのシステム ID(パーティションの用途を示すもの)を変更します。
  • w コマンドで変更を書き込んで終了します。

パーティションの変更はデータ損失につながる可能性があるため、ディスクパーティションに変更を加える前には、常に注意を払い、重要なデータをバックアップすることを忘れないでください。

fdisk はパーティション情報を表示するだけではありません。対話的にディスクパーティションを作成、削除、変更することもできます。ディスクパーティショニングに不可欠なツールですが、重要なデータが保持されているシステムで fdisk を使用してパーティションを変更する場合は注意が必要です。不適切な変更はデータ損失を招く恐れがあります。

まとめ

お疲れ様でした!この実験では、以下の方法を学びました。

  1. df によるディスク使用量の確認
  2. du によるディレクトリサイズの調査
  3. 仮想ディスクの作成、フォーマット、マウント、およびアンマウント
  4. fdisk によるパーティション情報の表示

これらのスキルは、より高度な Linux システム管理タスクの基礎となります。Linux システムにおけるストレージの管理、ディスク容量不足のトラブルシューティング、ファイルシステムの健全性維持において極めて重要です。

追加のチャレンジとして、ホームディレクトリ内のファイルまたはディレクトリのサイズ上位 10 件を見つけ、人間が読みやすい形式で表示するシェルスクリプトを書いてみてください。これにより、この実験で学んだいくつかのコマンドを組み合わせることができます。

これらの概念を習得するには、練習が鍵となります。理解を深めるために、(安全な環境で)これらのコマンドをためらわずに試してみてください。Linux システム管理の学習の旅が今後も実りあるものになるよう応援しています!