ホームページ >システムチュートリアル >Linux >inode と拡張属性を理解して Linux クラウド環境のデータ セキュリティを向上させる
Linux クラウド環境では、データのセキュリティは非常に重要なタスクです。 inode と拡張属性の 2 つの概念は、データのセキュリティに重大な影響を与える可能性があります。 inode は Linux ファイル システムの中核概念の 1 つで、ファイルまたはディレクトリの物理的な場所、アクセス許可、その他の情報をディスク上に保存します。拡張属性は、inode に含まれる追加のメタデータのセットであり、ファイルの作成者、作成時間など、より詳細な情報をファイルまたはディレクトリに追加できます。この情報は、データの回復と保護において非常に重要です。
1. i ノードとは何ですか?
inode を理解するには、ファイル ストレージから始める必要があります。
ファイルはハードディスクに保存されており、ハードディスクの最小の記憶単位を「セクタ」といいます。各セクターには 512 バイト (0.5KB に相当) が格納されます。
オペレーティング システムはハードディスクを読み取る際、セクターごとに読み取るのではなく、効率があまりにも悪いため、複数のセクターを一度に連続して読み取ります。つまり、一度に 1 つの「ブロック」を読み取ります。 。複数のセクターから構成されるこの「ブロック」がファイルアクセスの最小単位です。 「ブロック」の最も一般的なサイズは 4KB です。つまり、8 つの連続したセクターがブロックを形成します。
ファイル データは「ブロック」に保存されるため、ファイルの作成者、ファイルの作成日、ファイルのサイズなどのファイルのメタ情報を保存する場所も見つける必要があります。ファイルなどファイルのメタ情報を格納するこの領域はinodeと呼ばれ、中国語訳は「インデックスノード」です。
2. inode の内容
inode には、ファイルのメタ情報、具体的には次の内容が含まれます:
* ファイル内のバイト数
* ファイル所有者のユーザー ID
* ファイルのグループ ID
* ファイルの読み取り、書き込み、および実行の権限
* ファイルには 3 つのタイムスタンプがあります。ctime は i ノードが最後に変更された時刻を指し、mtime はファイルの内容が最後に変更された時刻を指し、atime はファイルが最後に開かれた時刻を指します。
* リンクの数、つまり、この i ノードを指すファイル名の数
* ファイル データ ブロックの場所
stat コマンドを使用して、特定のファイルの i ノード情報を表示できます。
stat example.txt
つまり、ファイル名を除くすべてのファイル情報は i ノードに保存されます。ファイル名がない理由については、以下で詳しく説明します。
3. i ノードのサイズ
Inode はハードディスクの容量も消費するため、ハードディスクがフォーマットされると、オペレーティング システムは自動的にハードディスクを 2 つの領域に分割します。 1 つはファイルデータを格納するデータ領域であり、もう 1 つは inode に含まれる情報を格納する inode 領域 (inode テーブル) です。
各 inode ノードのサイズは通常 128 バイトまたは 256 バイトです。 inode ノードの合計数はフォーマット中に指定され、通常は 1KB ごとまたは 2KB ごとに 1 つの i ノードが設定されます。 1 GB のハードディスクで、各 i ノードのサイズが 128 バイトで、1 KB ごとに 1 つの i ノードが設定されていると仮定すると、inode テーブルのサイズは 128 MB に達し、ハードディスク全体の 12.8% を占めます。
各ハードディスク パーティション内の i ノードの合計数と使用されている数を表示するには、df コマンドを使用できます。
リーリー各 i ノード ノードのサイズを表示するには、次のコマンドを使用できます:
リーリー各ファイルには i ノードが必要なため、i ノードが使い果たされていても、ハードディスクがまだいっぱいになっていない場合があります。現時点では、ハード ドライブ上に新しいファイルを作成することはできません。
4. i ノード番号
各 i ノードには番号があり、オペレーティング システムはその i ノード番号を使用してさまざまなファイルを識別します。
ここで繰り返しておきますが、Unix/Linux システムは内部的にファイル名を使用せず、ファイルを識別するために i ノード番号を使用します。システムにとって、ファイル名は識別を容易にするための inode 番号のエイリアスまたはニックネームにすぎません。表面的には、ユーザーはファイル名でファイルを開きます。実際、システム内のプロセスは 3 つのステップに分かれています: まず、システムはファイル名に対応する i ノード番号を見つけます。次に、inode 番号を通じて i ノード情報を取得します。最後に、inode 情報に基づいて、ファイルデータが配置されているブロックにアクセスし、データを読み取ります。
ls -i コマンドを使用して、ファイル名に対応する i ノード番号を確認します:
リーリー5. ディレクトリ ファイル
Unix/Linux システムでは、ディレクトリもファイルの一種です。ディレクトリを開くということは、実際にはディレクトリ ファイルを開くことを意味します。
ディレクトリ ファイルの構造は非常に単純で、一連のディレクトリ エントリ (dirent) のリストです。各ディレクトリ エントリは、含まれるファイルのファイル名と、ファイル名に対応する i ノード番号の 2 つの部分で構成されます。
ls コマンドは、ディレクトリ ファイル内のすべてのファイル名のみをリストします:
リーリーls -i コマンドは、ディレクトリ ファイル全体、つまりファイル名と i ノード番号をリストします。 リーリー
ファイルの詳細情報を表示したい場合は、inode ノードにアクセスし、inode 番号に従って情報を読み取る必要があります。 ls -l コマンドは、ファイルに関する詳細情報を一覧表示します。リーリー
6. ハードリンク
一般情况下,文件名和inode号码是”一一对应”关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为”硬链接”(hard link)。
ln命令可以创建硬链接:
ln 源文件 目标文件
运行上面这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做”链接数”,记录指向该inode的文件名总数,这时就会增加1。反过来,删除一个文件名,就会使得inode节点中的”链接数”减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。
这里顺便说一下目录文件的”链接数”。创建目录时,默认会生成两个目录项:”.”和”..”。前者的inode号码就是当前目录的inode号码,等同于当前目录的”硬链接”;后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的”硬链接”。所以,任何一个目录的”硬链接”总数,总是等于2加上它的子目录总数(含隐藏目录),这里的2是父目录对其的“硬链接”和当前目录下的”.硬链接“。
**七、软链接
**
除了硬链接以外,还有一种特殊情况。文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的”软链接”(soft link)或者”符号链接(symbolic link)。
这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:”No such file or directory”。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode”链接数”不会因此发生变化。
ln -s命令可以创建软链接。
ln -s 源文文件或目录 目标文件或目录
八、inode的特殊作用
由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。
\1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
\2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。
\3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。
第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。
九 实际问题
在一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了66%,还有12G的剩余空间,按理说不会出现这种问题。 后来用df -i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。
查找原因:
/data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。
解决方案:
1、删除/data/cache目录中的部分文件,释放出/data分区的一部分inode。
2、用软连接将空闲分区/opt中的newcache目录连接到/data/cache,使用/opt分区的inode来缓解/data分区inode不足的问题:
ln -s /opt/newcache /data/cache
在Linux云环境下,inode和扩展属性是非常有用的工具,它们可以帮助我们更好地保护和管理数据。通过对inode和扩展属性的深入了解,我们可以更好地理解Linux文件系统的工作原理,更好地掌握数据安全的方法。因此,我们强烈建议Linux云环境下的用户不仅要了解inode和扩展属性,还要深入了解其他的相关概念和技术,从而更好地保护自己的数据安全。
以上がinode と拡張属性を理解して Linux クラウド環境のデータ セキュリティを向上させるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。