ファイル システムの原理 (inode、ソフト リンクとハード リンクの違い) の詳細な分析

改善の第 4 段階

日時: 2023 年 8 月 29 日

参加者:クラス全員

内  容:

ファイルシステムの原則の詳細な分析

目次

1. iノードとブロックの概要

(1) ファイルの i ノード情報を表示します:stat

(2) Atime、Mtime、Ctime の詳細説明:

(3) 運用例:

2. ディレクトリファイルの構造

3. iノード番号

(2) ファイルのinode番号を確認する

(3) ファイルの保存場所の比較

(4) 指定したinode番号に該当するファイルを削除します。

(5) ファイルシステムのinodeとブロック情報を確認する

(6) フォーマット時にファイルシステムのinode数とブロックサイズを指定する

(7) inode枯渇によるディスク障害の解決

4. Linux ファイル システムにおけるソフト リンクとハード リンクの原則

(1) ハードリンク

(2) ソフトリンク

(3) ハードリンクとソフトリンクの比較


1. iノードとブロックの概要

        ファイルはハードディスクに保存されますが、ハードディスクの最小の記憶単位は「セクタ」と呼ばれ、各セクタは 512 バイトです。

        オペレーティング システムがハードディスクからデータを読み取る場合、効率があまりにも悪いセクター単位で読み取るのではなく、一度に複数のセクターを連続して読み取る、つまり一度に 1 つの「ブロック」を読み取ります。空間の複数のセクターの)。  

        複数のセクターから構成されるこの「ブロック」がファイルアクセスの最小単位です。「ブロック」の最も一般的なサイズは 4KB です。つまり、8 つの連続したセクターがブロックを形成します。ブロックにはファイルデータが保存されます。

        ファイル データは「ブロック」に保存されるため、ファイルが属するユーザー、ファイルが属するグループ、ファイルの種類、アクセス許可などのファイルのメタ情報を保存する場所を見つける必要があります。ファイルの内容、ファイルの作成時刻、ファイルの変更時刻、アクセス時刻、ファイルが使用するブロック情報、ファイルへのハードリンクの数、ファイルのサイズ、その他の属性情報。

ファイルのメタ情報を格納するこの領域は Inode と呼ばれます。中国語訳は「インデックス ノード」 i ノードとも呼ばれます。

        i ノード ブロックは、ファイル システムの基本的な中心概念です。ファイル システムは、パーティションがフォーマットされるときに形成されます。ファイル システムは、パーティション上のファイルのストレージを編成する役割を果たします。

知らせ:

Inode にファイル名が含まれていません。ファイル名はディレクトリのディレクトリエントリに格納されます。

ファイルは i ノードと少なくとも 1 つのブロックを占有する必要があります。

(1) ファイルの i ノード情報を表示します:stat

[root@localhost ~]# stat 1.txt

 

(2) Atime、Mtime、Ctime の詳細説明:

英文

ニックネーム

中国語翻訳

いつ変更するか

表示コマンド

アクセス

時間

面接時間

読む

ls - ル

修正する

エムタイム

時間を変更してください

書く、修正する

ls -l

変更・作成

時間

変更時間/作成時間

ファイル名の変更、書き込み、変更、権限の変更、およびリンクの作成

ls -lc

(3) 運用例:

1. ファイルの内容を読み取り、Atime の変更を表示します。

[root@localhost ~]# echo haha​​ > a.txt

[root@localhost ~]# stat a.txt

[root@localhost ~]# cat a.txt

[root@localhost ~]# stat a.txt

 

2. ファイルの内容を書き込み、Mtime/Ctimeの変更を確認します。

[root@localhost ~]# stat a.txt

[root@localhost ~]# echo hehe > a.txt

[root@localhost ~]# stat a.txt

 

3. ファイル権限を変更し、Ctime で変更を表示します。

[root@localhost ~]# stat a.txt

[root@localhost ~]# chmod 777 a.txt

[root@localhost ~]# stat a.txt

 

4. ハードリンクを作成し、Ctime の変更を表示します。

[root@localhost ~]# stat a.txt

[root@localhost ~]# ln /root/a.txt /tmp/a.txt

[root@localhost ~]# stat a.txt

 

5. ファイル名を変更し、Ctime の変更を確認します。

[root@localhost ~]# stat a.txt

[root@localhost ~]# mv a.txt aa.txt

[root@localhost ~]# stat aa.txt

 

6. 更新時間をタッチすると、3 つの時間がすべて変更されます

[root@localhost ~]# stat aa.txt

[root@localhost ~]# touch aa.txt

[root@localhost ~]# stat aa.txt

 

2. ディレクトリファイルの構造

ディレクトリもファイルです

        各 i ノードには番号があり、オペレーティング システムはその i ノード番号を使用してさまざまなファイルを識別します。

        ファイル システムは、内部でファイルを参照するためにファイル名を使用しませんが、ファイルを識別するために i ノード番号を使用します。ファイルシステムの場合、ファイル名は識別を容易にするための inode 番号の別の名前であり、ファイル名はディレクトリのデータです。

3. iノード番号

(1) ファイルシステムからファイルにアクセスする手順:

1. ユーザーには、ディレクトリ内でアクセスするファイルの名前が表示されます。

2. ディレクトリデータからこのファイル名に対応する i ノード番号を見つけます。

3.inode番号からinode情報(ファイルのメタ情報)を取得します。

4. inode情報に従って、ファイルデータが配置されているブロックを見つけてデータを読み取ります。

inode は通常 128 バイトまたは 256 バイトで、各 inode にはファイルが使用するブロック番号が記録され、ブロック番号を記録する情報は 4 バイトを占めます。

i ノード内のブロック番号のレコードには、直接 12 個、間接 1 個、二重間接 1 個、三重間接 1 個の合計が含まれます。

        12 個の直接接続は、合計 48 バイトのディスク領域を占有し、ブロック番号を直接ポイントする 12 個の情報が含まれています。このファイル システムのデフォルトのブロック サイズが 4KB の場合、12*4=48KB のファイル コンテンツのみをポイントできます。

        ただし、ファイルが大きい場合は、より多くのブロック (間違いなく 12 ブロックを超える) を使用する必要があり、その場合は間接、二重間接、三重間接が使用されます。

        間接: i ノードに記録されている 4 バイトのコンテンツを指し、ブロックを指します。このブロックに格納されるのは、実際のファイルの内容ではなく、実際のファイルが格納されている場所のブロック番号情報です。各ブロックのサイズが 4KB の場合、1024 個のブロック番号情報を保存でき、間接的に保存できるファイル サイズは 1024*4=4096KB となります。

        二重間接化:より大きなファイル コンテンツを保存できます。つまり、間接化に基づいて間接化が実行されます。この時点でブロック サイズがデフォルトの 4KB である場合、二重間接化によって保存できるファイル コンテンツのサイズは 1024* です。 1024*4 =4096MB

        三重間接化:つまり、二重間接化に基づいて間接化が実行されます。このときのブロック サイズがデフォルトの 4KB である場合、三重間接化で保存できるファイル コンテンツのサイズは 1024*1024*1024*4= となります。 4096GB

        つまり、デフォルトのブロック サイズが 4KB のファイル システムでは、ファイルの最大ストレージは 48KB+4096KB+4096MB+4096GB、つまり約 4100GB に達する可能性があります。

(2) ファイルのinode番号を確認する

ls -i ファイル名

統計ファイル名

例:

[root@localhost ~]# ls -i aa.txt

[root@localhost ~]# stat aa.txt

 

(3) ファイルの保存場所の比較

 

SuperBlock は、 ファイル システムのすべての i ノードおよびブロック関連情報を保存します。

        ユーザーが Linux システム内のファイルにアクセスしようとすると、システムはまずファイル名に基づいて i ノードを検索し、ユーザーがファイルにアクセスする権限を持っているかどうかを確認します。はいの場合は、対応するデータ ブロックをポイントします。そうでない場合は、許可が拒否されました (アクセスが拒否されました) を返します。

(4) 指定したinode番号に該当するファイルを削除します。

形式: find ./ -inum i ノード番号 -exec rm -i {} \;

例:ファイル名に特殊記号が含まれている場合、その i ノード番号を削除してファイルを削除できます。

[root@localhost ~]# touch 'ab`_c de ! 4|'.txt

[root@localhost ~]# ls -li

[root@localhost ~]# find ./ -inum 34097384 -exec rm -i {} \;

rm: 通常の空のファイル「./ab`_c de ! 4|.txt」を削除しますか? y

[root@localhost ~]# ls

 

/root/ ディレクトリから 3 日以内に変更されたファイルを検索し、/tmp にコピーします。

[root@localhost ~]# ls /tmp/

[root@agent ~]# find /root/ -mtime -3 -a -type f -exec cp {} /tmp \;

 

(5) ファイルシステムのinodeとブロック情報を確認する

df -i デバイス名(ファイルシステムのマウント時のクエリ、inode の合計数と使用されている数のクエリ)

dumpe2fs -h デバイス名 (ファイルシステムをマウントする必要はありません)

tune2fs -l デバイス名 (ファイルシステムをマウントする必要はありません)

例:

[root@localhost ~]# df -i /data

[root@localhost ~]# umount /data

[root@localhost ~]# dumpe2fs -h /dev/sdb1

[root@localhost ~]#tune2fs -l /dev/sdb1

 

(6) フォーマット時にファイルシステムのinode数とブロックサイズを指定する

mkfs.ext4 -N i ノード番号 -b ブロック サイズ (バイト単位) デバイス名

例: i ノード数が 60,000、ブロック サイズが 1KB に設定されている

[root@localhost ~]# mkfs.ext4 -N 60000 -b 1024 /dev/sdb1

[root@localhost ~]# dumpe2fs -h /dev/sdb1 | grep -i "inode 数"

[root@localhost ~]# dumpe2fs -h /dev/sdb1 | grep -i "ブロックサイズ"

 

(7) inode枯渇によるディスク障害の解決

1. 使用されていないファイルを削除し、ディスク クォータを構成する

[root@localhost ~]# find /data -mtime -1 -exec rm -rf {} \;

[root@localhost ~]# rm -rf `find /data -mtime -1` `` = $()

[root@localhost ~]# find /data -mtime -1 |xargs rm -rf  

2. ファイルをバックアップし、ファイル システムを再フォーマットし、より多くの i ノードを指定します。

[root@localhost ~]# df -i /test

[root@localhost ~]# touch /test/{1..28213}.txt

[root@localhost ~]# touch /test/hello.txt

2 番目の方法を使用します。

[root@localhost ~]# mkdir /backup

[root@localhost ~]# mv /test/* /backup/

[root@localhost ~]# umount /test

[root@localhost ~]# mkfs.ext4 -N 50000 /dev/sdb2 &> /dev/null

[root@localhost ~]# mount /dev/sdb2 /test

[root@localhost ~]# mv /backup/* /test

mv: `/test/lost+found' を上書きしますか? y

[root@localhost ~]# touch /test/hello.txt

4. Linux ファイル システムにおけるソフト リンクとハード リンクの原則

(1) ハードリンク

メソッド: ln ソースファイル ターゲットファイル

特徴:

        ハード リンクが指すファイルの i ノード番号。新しく生成されたハード リンク ファイルの i ノード番号は、ソース ファイルの i ノード番号と同じです。ハード リンクはディレクトリに対して作成できず、同じファイル システム内にある必要があります。 。一方のファイル名を削除しても、もう一方のファイル名へのアクセスには影響しません。

例:

[root@localhost ~]# df -h /data

[root@localhost ~]# cd /data

[root@localhost data]# ln a.txt hardlink-a.txt

[root@localhost data]# ls -li

 

ソース ファイルを削除します。ハード リンクは影響を受けません。

[root@localhost データ]# echo "abc" > a.txt

[root@localhost データ]# rm -rf a.txt

[root@localhost データ]# cathardlink-a.txt

 

(2) ソフトリンク

メソッド: ln -s ソース ファイルまたはディレクトリ ターゲット ファイルまたはディレクトリ

特徴:

ソフトリンクはシンボリックリンクとも呼ばれます

        ソフト リンクが指すファイル名。新しく生成されたソフト リンク ファイルの i ノード番号は、ソース ファイルとは異なります。ディレクトリでもソフト リンクを生成できます。ソフト リンク ファイルとソース ファイルは、同じファイル システムです。ソフト リンク ファイルの内容はソース ファイルに属します。パス、読み取り時、システムは自動的にソース ファイル パスに誘導され、ソース ファイルに基づいてファイルの内容を検索します。ただし、ソース ファイルが移動または名前変更すると、ソフト リンクはエラーを報告します。

例:

[root@localhost data]# echo "soft test" > a.txt

[root@localhost data]# ln -s a.txt softlink-a.txt

[root@localhost data]# ll -i

 

ソース ファイルの名前を変更します。ハード リンクは影響を受けませんが、ソフト リンクは無効になります。

[root@huyang1 data]# ls -li

[root@huyang1 data]# ln a.txt hardlink.txt

[root@huyang1 data]# ls -li

[root@localhost data]# mv a.txt b.txt

[root@localhost data]# ls -li

[root@huyang1 data]# cat b.txt

[root@huyang1 data]# cat hardlink.txt

[root@localhost data]# cat softlink-a.txt 

 

(3) ハードリンクとソフトリンクの比較

ハードリンク

ソフトリンク

指向

inode号

ファイル名

inode番号は同じですか?

同じ

違う

ディレクトリをターゲットにすることは可能ですか

ディレクトリをターゲットにできません

ディレクトリをターゲットにできる

ファイルシステムを越えることはできますか?

ファイルシステムを越えることはできません

ファイルシステムをまたがることができる

ソースファイルの削除、名前変更、移動

影響を受けません

無効

コマンドの作成

ln ソースファイル ターゲットファイル

ln -s ソース ファイルまたはディレクトリ ターゲット ファイルまたはディレクトリ

おすすめ

転載: blog.csdn.net/2302_77582029/article/details/132561165
おすすめ