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

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/nvme1n1  104806400  57754052  47052348  56% /etc/hosts
    

    最初は難しく見えるかもしれませんが、各項目の意味は以下の通りです。

    • Filesystem: ディスクまたはパーティションの名前。
    • 1K-blocks: ファイルシステムの合計サイズ(1キロバイト単位)。
    • 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/nvme1n1   100G   56G   45G  56% /etc/hosts
    

    こちらの方がずっと分かりやすいですね。サイズがGBやMB単位で表示されるようになります。

  4. 特定のファイルやディレクトリが含まれるファイルシステムの空き容量を確認したい場合は、そのパスを df に渡すことができます。

    df -h /etc/hosts
    

    これにより、/etc/hosts を含むファイルシステムの情報のみが表示されます。この環境では、通常 /dev/nvme1n1 が該当します。

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 ~
    

    --max-depth=1 オプションにより、サブディレクトリの階層を1段階までに制限して表示します。

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

    du -sh ~/*
    

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

  6. ホームディレクトリ内で最も容量を占有している項目を見つける強力なコマンドがこちらです。

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

    仕組みは以下の通りです。

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

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

du コマンドは、ディスクの空き容量を確保したい場合に非常に役立ちます。どのディレクトリやファイルが場所を取っているかを特定し、整理の優先順位を決めるのに最適です。

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

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

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

  • 実際のハードウェアを危険にさらさずにディスク操作を安全にテストする
  • 隔離されたストレージ領域を作成する
  • 追加の物理ハードウェアなしでディスク管理を学習する
  • 実際のディスクのバックアップイメージを作成する

主要な概念の理解

実践に入る前に、重要な概念をいくつか押さえておきましょう。

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

  2. マウント: マウントとは、ファイルシステムをオペレーティングシステムからアクセス可能にするプロセスです。ファイルシステムをマウントするということは、Linuxに対して「このディスクの内容をこの特定のディレクトリで利用できるようにせよ」と指示することです。これは以下のような手順に似ています。

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

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

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

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

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

    コマンドの詳細は以下の通りです。

    • dd: ファイルのコピーや変換を行うユーティリティ。
    • if=/dev/zero: 「入力ファイルは /dev/zero(無限にゼロを出力する特殊ファイル)」を指定。
    • of=virtual.img: 「出力ファイルは 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
    

    アンマウントすると、そのディレクトリからファイルシステムが切り離されます。これにより、オペレーティングシステムは保留中の読み書き操作をすべて完了させ、安全に取り外すことができます。適切にアンマウントしないと、データ破損の原因となる可能性があります。コマンドの構文はディレクトリのアンマウントを対象としていますが、内部的にはオペレーティングシステムがこのディレクトリとマウントされたディスクイメージの対応関係を把握しています。

仮想ディスクの作成、フォーマット、マウントという一連の流れは、新しいハードドライブやUSBメモリを接続する際の手順と非常に似ています。主な違いは、物理デバイスの代わりにファイルを使用している点です。

ファイルシステムをマウントするとは、オペレーティングシステムが内部のデータにアクセスできるように、特定のディレクトリにファイルシステムを接続することを意味します。このラボでは、仮想ディスクイメージファイルが物理ディスクであるかのように扱われ、マウントすることでその内容が特定のディレクトリ(例: /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は単にパーティション情報を表示するだけでなく、対話的にディスクパーティションを作成、削除、変更することも可能です。ディスクパーティション管理に不可欠なツールですが、重要なデータが保存されているシステムでパーティションを変更する際は、不適切な操作がデータ損失を招く可能性があるため、十分に注意してください。

まとめ

お疲れ様でした!このラボでは以下のことを学びました。

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

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

追加のチャレンジとして、ホームディレクトリ内で最も容量を占有している上位10個のファイルまたはディレクトリを見つけ、そのサイズを人間が読みやすい形式で表示するシェルスクリプトを作成してみてください。これは、このラボで学んだいくつかのコマンドを組み合わせる良い練習になります。

これらの概念を習得するには、練習が何よりも重要です。理解を深めるために、安全な環境でこれらのコマンドを積極的に試してみてください。Linuxシステム管理の学習の旅が続くことを応援しています!