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は2つ以上のフィールドがNULLであるレコードを見つける問題を解決します

コアコード /*-------------------------------- 2つ以上のフィール...

Windows Server 2008 のサーバー パフォーマンス監視に関するチュートリアル

次に、ログ管理、ログのアーカイブ、ログのトラブルシューティング、イベントの転送と収集のためのコンピュ...

包括的なウェブサイト評価ソリューション

<br />「XXXのウェブサイトを見てみませんか?」といった質問をされることもあります...

MySQLはgroup_concat()関数に基づいて複数のデータ行を結合します

非常に便利な機能group_concat() について、マニュアルには次のように記載されています: ...

クリックして認証コードと認証を切り替えるJavaScript

この記事では、クリックして切り替える認証コードと認証を実装するためのJavaScriptの具体的なコ...

Linux ncコマンドの概要

NC のフルネームは Netcat (Network Knife) で、作成者は Hobbit &a...

TypeScript 列挙の基本と例

目次序文TypeScript の列挙型とは何ですか? TypeScriptで列挙型を使用する際に注意...

HTML テーブルタグチュートリアル (17): テーブルタイトルの垂直配置属性 VALIGN

表のキャプションは表の上または下に配置でき、プロパティで調整できます。デフォルトのテーブル タイトル...

Mailtoを使えばHTMLでメールを送るのは簡単

最近、顧客のフッターメールボックスにクリックして送信するメール機能を追加しました。Baidu で検索...

光沢のある輝くウェブサイトデザインの感動的なデザイン例

このコレクションには、あなたのデザインアイデアにインスピレーションを与える、輝いて光沢のある、優れた...

CSS スティッキーレイアウトを使用してヘッダーを上部に配置する方法

適用シナリオ:新しい要件の 1 つはアンケート調査を行うことですが、必然的に多くの質問が含まれ、1 ...

HBuilderX で Tomcat 外部サーバーを設定して、JSP インターフェイスを表示および編集する方法の詳細な説明

1. 最初の方法は、ローカルのTomcatを起動してJSPを表示することです。 tomcatのweb...

CSS でよく発生する問題の整理 (ロゴのハッキング/コンテナの固定/画像の垂直方向の中央揃え)

1. IEブラウザモードハックロゴ1. CSSハックロゴコードをコピーコードは次のとおりです。 ie...

Vue の get リクエストと post リクエストの違いのまとめ

このチュートリアルの動作環境: Windows 7 システム、vue 2.9.6 バージョン、DEL...