Linuxファイルシステム操作の実装

Linuxファイルシステム操作の実装

この読書ノートでは、主にファイルシステムに関連する操作を記録します。

ディスクとディレクトリの容量

ディスク全体のデータはスーパーブロックにありますが、個々のファイルの容量は inode に記録されます。ディスク使用量を表示するには、通常、次の 2 つのコマンドが使用されます。

df: ファイルシステム全体のディスク使用量を一覧表示する

du: ファイルシステムのディスク使用量を評価します (ディレクトリが占有する容量を評価するためによく使用されます)

$ df [-ahikHTm] [ディレクトリまたはファイル名]
パラメータ:
-a: システム固有の /proc (/proc はメモリにマウントされ、ディスク領域を占有しません) およびその他のファイル システムを含むすべてのファイル システムを一覧表示します。
-k: 各ファイルシステムの容量を KB 単位で表示します -m: 各ファイルシステムの容量を MB 単位で表示します -h: GB、MB、KB などの読みやすい形式で表示します -H: M=1024K を M=1000K に置き換えます -T: パーティションのファイルシステム名を一覧表示します (ext3 など)
-i: ディスク容量ではなくiノードで表示します

df が主に読み取るデータはファイルシステム全体のほぼすべてであり、読み取り範囲はスーパーブロック内の情報のみであるため、このコマンドは結果を非常に速く表示します。

$ du [-ahskm] ファイル名またはディレクトリ名 パラメータ:
-a はすべてのファイルとディレクトリの容量をリストします。デフォルトではディレクトリのファイル容量のみがカウントされるためです。-h は容量を人間が読める形式で表示します。-s は各ディレクトリが占める容量をリストせずに合計量をリストします。-S はサブディレクトリの合計を含みません。-k は KB 単位で容量をリストします。-m は MB 単位で容量をリストします。

duはファイルシステム内のすべてのファイルデータを直接検索します

リンクファイル: ln

Linux には 2 種類の接続ファイルがあります。1 つは Windows のショートカットに似ており、対象のファイルまたはディレクトリにすばやく接続できます。もう 1 つは、新しいファイルを生成するのではなく、ファイル システムの inode 接続を通じて新しいファイル名を生成する方法です。これはハード リンクと呼ばれます。

ハードリンク(ハードリンクと実際のリンク)

  • 各ファイルは inode を占有し、ファイルの内容は inode レコードによって示されます。
  • ファイルを読み取る場合は、ディレクトリに記録されているファイル名を使用して、正しい inode 番号を指定してから読み取る必要があります。
  • ファイル名はディレクトリに関連し、ファイルの内容は inode に関連します。ハード リンクは、ディレクトリ内に新しいファイル名を作成し、特定の inode 番号に接続する関連付けレコードです。
vagrant@vagrant-ubuntu-trusty-64:~$ cd /tmp
vagrant@vagrant-ubuntu-trusty-64:/tmp$ タッチテス
vagrant@vagrant-ubuntu-trusty-64:/tmp$ ln テスト test1
vagrant@vagrant-ubuntu-trusty-64:/tmp$ ll -i テスト test1
62273 -rw-rw-r-- 2 放浪者 放浪者 0 12月17日 12:39 テスト
62273 -rw-rw-r-- 2 放浪者 放浪者 0 12月17日 12:39 test1

2 つのファイルの inode 番号は同じであり、ファイルのアクセス許可属性もまったく同じであり、接続数が 2 になっていることがわかります。

ハードリンクの最大の利点はセキュリティです。ファイル名を削除しても、inode とブロックはそのまま残ります。このとき、別のファイル名を通じて正しいファイルデータを読み取ることができます。どのファイル名を使用して編集しても、最終結果は同じ inode とブロックに書き込まれるため、データを変更することができます。

一般的に、ハード リンクを使用してファイルを接続する場合、ディスク領域と inode の数は変わりません。ハード リンクは、ディレクトリの下のブロックに、関連するデータを 1 つ追加するだけです。inode は増加せず、ブロックの数も消費しません (ただし、関連するデータを 1 つ追加したときにディスクがいっぱいになった場合は、ファイル名の関連付けを記録するためにブロックを 1 つ追加する必要があり、ディスク領域が変わります)。

ハードリンクの制限:

  • ファイルシステムをまたぐことはできません
  • ハードリンクを使用してディレクトリに接続すると、接続されたデータは接続されたディレクトリの下にあるすべてのデータと接続される必要があり、環境がかなり複雑になるため、ディレクトリに接続することはできません。そのため、ディレクトリは現時点ではサポートされていません。

シンボリック リンク (シンボリック リンク、ショートカットとも呼ばれる)

シンボリック リンクは独立したファイルを作成し、このファイルは、リンク先のファイルのファイル名にデータ読み取りをポイントします。ファイルはポイント操作としてのみ使用されるため、ソース ファイルが削除されると、シンボリック リンク ファイルはソース ファイルを見つけられなくなり、開くことができなくなります。

vagrant@vagrant-ubuntu-trusty-64:/tmp$ ln -s テスト test2
vagrant@vagrant-ubuntu-trusty-64:/tmp$ ll -i テスト test2
62273 -rw-rw-r-- 2 放浪者 放浪者 0 12月17日 12:39 テスト
62275 lrwxrwxrwx 1 vagrant vagrant 4 12月17日 13:07 test2 -> test

2 つのファイルは異なる inode 番号を指しています。接続されたファイルで重要なのは、ターゲット ファイルのファイル名を書き込むことです。矢印の右側のファイルは 4 バイトなので、接続されたファイルのサイズは 4 バイトです。

シンボリックリンクによって作成されたファイルは独立した新しいファイルなので、inode とブロックを占有します。

シンボリックリンクファイルを変更すると、ソースファイルも変更されます。

$ ln [-sf] ソースファイル ターゲットファイル パラメータ:
-s: パラメータなしで接続するとハードリンクになり、-s はシンボリックリンクになります。
-f: 対象ファイルが存在する場合は削除して再構築します。

ディレクトリへのリンクの数

ファイルがハードリンクで接続されると、ファイル接続の数は 1 つ増加します。空のディレクトリを作成すると、. と .. の 2 つのディレクトリがあるため、空のディレクトリ /tmp/testing を作成すると、基本的に次の 3 つが存在します。
/tmp/テスト
/tmp/テスト/。
/tmp/テスト/..
/tmp/testing と /tmp/testing/. はどちらもディレクトリを表し、/tmp/testing/.. はディレクトリ /tmp を表します。したがって、新しいディレクトリを作成すると、新しいディレクトリへのリンクの数は 2 になり、親ディレクトリへのリンクの数は 1 つ増加します。

ディスクのパーティション分割、フォーマット、チェック、マウント

システムに新しいハードディスクを追加する場合は、次の手順を実行する必要があります。

  1. ディスクをパーティション分割して新しい利用可能なパーティションを作成する
  2. パーティションをフォーマットして、システムで使用できるファイル システムを作成します。
  3. さらに慎重にしたい場合は、新しく作成されたファイルシステムを確認できます。
  4. Linux システムでは、マウント ポイント (つまり、ディレクトリ) を作成してマウントする必要があります。

ディスクパーティション: fdisk

$ fdisk [-l] デバイス名パラメータ:
-l: 後続のデバイスのすべてのパーティションの内容を出力します。 fdisk -f のみを使用すると、システム全体で検出できるデバイスのすべてのパーティションが一覧表示されます。

# 例えば:
# まずディスクファイル名を見つける vagrant@vagrant-ubuntu-trusty-64:/tmp$ df /
ファイルシステム 1Kブロック 使用済み 使用可能 使用率 マウント済み
/dev/hdc1 41251136 3631948 35883276 10% /
# 数字なしで fdisk と入力 vagrant@vagrant-ubuntu-trusty-64:/tmp$ fdisk /dev/hdc
コマンドプロンプトが表示されます(ヘルプはm):mを入力すると、関連するパラメータプロンプトが表示されます。dはパーティションを削除すること、nはパーティションを追加すること、pはパーティションテーブルを画面に表示すること、qは保存せずにfdiskプログラムを終了すること、wは前回の操作をパーティションテーブルに書き込むことを表します。

q と w には特に注意してください。fdisk を終了するときに q を押すと、すべての操作が有効になりません。逆に、w を押すと、操作が有効になります。

ディスクパーティションの削除

パーティションを削除するには (たとえば、/dev/hdc のすべてのパーティションを削除するには)、次の手順を実行する必要があります。

  1. fdisk /dev/hdc: まずfdiskインターフェースに入る
  2. p: まずパーティション情報を確認します。/dev/hdc1を削除すると仮定します。
  3. d: このとき、パーティションを選択する必要があるので、1を選択します。
  4. w または q: w はディスク データ テーブルに保存して fdisk を終了します。後悔する場合は、q を押して削除操作をキャンセルします。

新しいディスクパーティションを追加する

以下のアクションを実行する必要があります。

  1. fdisk /dev/hdc: まずfdiskインターフェースに入る
  2. n: 新しいパーティションを追加
  3. p または e または l: 異なるパーティション タイプを選択します。p はプライマリ パーティション、e は拡張パーティション、l は論理パーティションを表します。
  4. 1 - 4: パーティション番号。1~4を選択できます。論理パーティションの場合は、パーティション番号を入力する必要はありません。
  5. 終了シリンダ番号を入力します。シリンダ/パーティション サイズを自分で計算するのが面倒な場合は、「+512M」のような形式を使用して、システムが 512M に最も近いシリンダ番号を割り当てるようにすることができます。
  6. p: パーティション情報を表示
  7. w または q: w はディスク データ テーブルに保存して fdisk を終了します。後悔する場合は、q を押して削除操作をキャンセルします。

パーティションの作成形式(プライマリ パーティション/拡張パーティション/論理パーティション)とパーティションのサイズに関しては、一般的に、新しいパーティションを作成する形式はいくつかあります。

  1. まだ1~4が残っており、システムに拡張パーティションがありません。この時点で、プライマリ/拡張を選択するオプションが表示され、1~4の数字を指定できます。
  2. まだ 1 ~ 4 個のパーティションが残っており、システムには拡張パーティションがあります。プライマリ/論理を選択するように求められます。p を選択した場合は、1 ~ 4 の番号を指定する必要があります。l を選択した場合は、システムによって論理パーティション ファイル名番号が自動的に割り当てられるため、番号を設定する必要はありません。
  3. 1-4が残っておらず、システムに拡張パーティションがある場合:この時点ではパーティションの種類を選択するように求められず、直接論理パーティションモードに入ります。

通常、パーティション分割後は、カーネルのパーティション テーブル情報を更新するために再起動する必要があります。「partprobe」を使用すると、カーネルにパーティション テーブルを再度見つけさせるように強制できます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Linux ファイルシステムのサイズを変更する方法 (Linux パーティションのサイズ変更)
  • Linux でマウントされたファイルシステムの種類を表示する方法
  • Linux ファイルシステムのブロックサイズを確認する方法
  • Linux環境でのGFSファイルシステムの使用
  • Linuxファイルシステムの詳細な分析
  • Linux パーティション ファイル システム タイプの概要
  • 「fsck」を使用して Linux のファイルシステムエラーを修正する方法
  • 新しい Linux オブジェクト ストレージ ファイル システム
  • Linux ジャーナリング ファイル システムの概要
  • Linux環境でExt3ファイルシステムを使用する

<<:  MySQL 8.0.16 圧縮版のダウンロードと Win10 システムへのインストール チュートリアル

>>:  Vueはダイアログのカプセル化を実装します

推薦する

MySQL マスター スレーブ データが矛盾しています。プロンプト: Slave_SQL_Running: 解決策はありません

この記事では、MySQL マスターとスレーブ データ間の不一致の解決方法と、プロンプト「Slave_...

VueはBaidu Mapsを使用して都市の位置特定を実現

この記事では、参考までに、Baidu Mapsを使用して都市の位置特定を実現するVueの具体的なコー...

Dockerを使用してブログサイトを素早く構築する方法の詳細な説明

目次1. 準備2. 展開プロセス3. アクセステストHalo は、ブログに慣れている学生に追加のオプ...

JavaScript での AOP プログラミングの基本実装

AOP の紹介AOP (アスペクト指向プログラミング) の主な機能は、コアビジネスロジックモジュール...

Vue ルーティングフォールバックに最適なソリューション (vue-route-manager)

目次ルーティングマネージャー背景はじめる問題を解決する方法要約するルーティングマネージャー各ジャンプ...

MySQLはランダムに一定数のレコードを抽出します

以前は、このような使用シナリオを処理するために rand() で直接 order していましたが、効...

js は丸で囲まれた数字のリストのサンプルコードを動的に追加します

1. まず本文にulタグを追加します <!-- 順序なしリスト --> <ul i...

CSS と JS を使用して下線効果を実装する方法の例

この記事では、主に 2 種類の下線の動的効果について説明します。1 つ目は、ホバーすると X 軸が内...

Weibo の一括フォロー解除機能を実装する JavaScript コード

Weibo ユーザーのフォローを一括で解除するクールな JavaScript コードWeibo には...

Centos6.6 で php7 + nginx 環境をインストールする方法

この記事では、centos6.6 で php7 + nginx 環境をインストールする方法について説...

vue-cli 設定では Vuex の完全なプロセスレコードを使用します

目次序文インストールと使用方法モジュラー管理Vuex の状態永続性要約する序文Vue 開発では、ユー...

個人履歴書を作成するための HTML の簡単な実装

履歴書コード: XML/HTML コードコンテンツをクリップボードにコピー<!DOCTYPE ...

MySQL 5.7.17 winx64 解凍版のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 5.7.17 winx64解凍版のインストールと設定方法を紹介します。具体...

js は、州、市、地区の 3 段階の選択カスケードを実装します。

この記事では、省、市、地区の3段階選択を実現するためのjsの具体的なコードを紹介します。具体的な内容...

HTML でテーブルを分割および結合する (colspan、rowspan)

このコードは水平マージを示しています。 <!DOCTYPE html PUBLIC "...