Linuxファイルシステムをより深く理解する(非常に詳細です!)(Inode番号の枯渇のトラブルシューティング、誤って削除されたファイルの回復、およびログファイルの分析)


1.Inode枯渇のトラブルシューティング

  • 各ファイルとinodeが相互に対応していること、つまり、各ファイルにinode番号が付いていることを以前に学びましたが、このようにして、inodeが使い果たされたが、ハードディスクがいっぱいではない可能性があります。
  • これが発生すると、ハードディスク上に新しいファイルを作成できなくなります。誰もがより直感的に理解できるようにするために、Linuxファイルシステム内のファイル数の障害をシミュレートする場合を以下に示します。

1.準備

  • 新しいハードディスクを作成し、パーティション/ dev / sdb1を作成し、パーティションサイズ+ 30M(大きすぎない、これは単なるシミュレーション実験です。そうでない場合、inode番号が多すぎます)
  • フォーマット、ext4フォーマット(xfsも機能します)
[root@localhost ~]# mkfs.ext4 /dev/sdb1
  • 状況が発生する可能性があります。パーティションが作成およびフォーマットされ、ディスクファイルが欠落していることが判明した後、どうすればよいですか?このとき、システムを再起動するか、「partprobe」コマンドを実行して、オペレーティングシステムに新しいパーティションテーブルを検出させ、パーティションのフォーマットを防止することをお勧めします。ハードドライブ内の既存のデータを損傷する
  • 新しいディレクトリを作成してマウントします
    マーク
  • 「-i」オプションを指定してdfコマンドを使用して、ファイルシステムでのiノードの使用状況を確認します。7680個のinodeがあることがわかります。
    マーク

2.iノードの枯渇障害をシミュレートします

  • / dev / sdb1(7680)で使用可能なすべてのiノードの枯渇をシミュレートするスクリプトを記述します
  • 後でスクリプトプログラムについて詳しく知るには、ここでそれを理解してください。
[root@localhost test]# for ((i=1;i<=7680;i++));do touch /test/file$i;done 
touch: 无法创建"/test/file7670": 设备上没有空间
touch: 无法创建"/test/file7671": 设备上没有空间
touch: 无法创建"/test/file7672": 设备上没有空间
touch: 无法创建"/test/file7673": 设备上没有空间
touch: 无法创建"/test/file7674": 设备上没有空间
touch: 无法创建"/test/file7675": 设备上没有空间
touch: 无法创建"/test/file7676": 设备上没有空间
touch: 无法创建"/test/file7677": 设备上没有空间
touch: 无法创建"/test/file7678": 设备上没有空间
touch: 无法创建"/test/file7679": 设备上没有空间
touch: 无法创建"/test/file7680": 设备上没有空间        ##这里开始提示设备上没有空间了

  • このとき、パーティションの使用可能なinodeを再度確認し、いっぱいになっていることを確認してから、新しいファイルを作成することはできませんが、パーティションを表示するdfコマンドを使用すると、「4%」しかありません。これから、次の情報を取得できます。ディスク作成されるファイルの数は、ディスクのサイズとinode番号の数によって制限されます。
[root@localhost test]# df -i /dev/sdb1
文件系统       Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb1       7680    7680       0     100% /test
[root@localhost test]# touch xcf.txt
touch: 无法创建"xcf.txt": 设备上没有空间
[root@localhost test]# df -Th /test/
文件系统       类型  容量  已用  可用 已用% 挂载点
/dev/sdb1      ext4   29M  916K   26M    4% /test

3.障害を修正します

  • 障害の原因を理解すると、問題はより適切に解決されます。「ls -a」を使用して、すべてのファイル(非表示ファイルを含む)を表示できます。
  • 次に、パーティション内の多数のiノードを占める小さなファイルを見つけて、それらを転送または削除します。
  • 多くのユーザーが共有するファイルシステムの場合、関連するユーザーのディスククォータを設定することをお勧めします(ファイルの数とディスク容量を含む)

2.誤って削除されたファイルを復元する

  • 通常のユーザーの多くがファイルを削除する場合、実際にはinodeノードとブロックデータを知らず、ファイル(名前)を見つけて削除するだけです。
  • 実際、Linuxはリンクの数によってファイルの削除を制御します。ファイルにリンクがない場合にのみ、ファイルは完全に削除されます。
  • LinuxシステムのEXTファイルシステムの場合、extundeleteリカバリツールを使用してファイルをリカバリできます。これは、ext3およびext4ファイルシステムをサポートするオープンソースのLinuxデータリカバリツールです(ext4はCentOS6バージョンでのみリカバリできます)。

1.準備(extundeleteをコンパイルしてインストールします)

  • 新しく作成したパーティションを今すぐ続行できますが、最初にマウントを解除し、次に「ext3」に再フォーマットしてからマウントします。
[root@localhost test]# cd
[root@localhost ~]# umount /test/
[root@localhost ~]# mkfs.ext3 /dev/sdb1 
...略
[root@localhost ~]# mount /dev/sdb1 /test/
  • extundeleteをコンパイルしてインストールする前に、2つの依存関係パッケージをインストールする必要があります(最初にミラーをマウントしたかどうかに注意してください)
[root@localhost ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# yum -y install e2fsprogs-devel e2fsprogs-libs
...略
  • 依存関係パッケージをインストールした後、パッケージをコピーするか、直接ダウンロードできます(コピーして貼り付けるだけです)。
[root@localhost test]# wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
--2020-12-03 15:32:50--  http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
正在解析主机 nchc.dl.sourceforge.net (nchc.dl.sourceforge.net)... 140.110.96.69, 2001:e10:ffff:1f02::17
正在连接 nchc.dl.sourceforge.net (nchc.dl.sourceforge.net)|140.110.96.69|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:108472 (106K) [application/octet-stream]
正在保存至: “extundelete-0.2.4.tar.bz2”

100%[==================>] 108,472     40.4KB/s 用时 2.6s   

2020-12-03 15:32:54 (40.4 KB/s) - 已保存 “extundelete-0.2.4.tar.bz2” [108472/108472])

  • 解凍、構成、コンパイル、インストール
[root@localhost test]# ls
extundelete-0.2.4.tar.bz2  lost+found
[root@localhost test]# tar jxvf extundelete-0.2.4.tar.bz2        ##解压
...略
[root@localhost test]# ls
extundelete-0.2.4  extundelete-0.2.4.tar.bz2  lost+found
[root@localhost test]# cd extundelete-0.2.4/
[root@localhost extundelete-0.2.4]# ls
acinclude.m4  config.h.in   depcomp     Makefile.am  README
aclocal.m4    configure     install-sh  Makefile.in  src
autogen.sh    configure.ac  LICENSE     missing
[root@localhost extundelete-0.2.4]# ./configure --prefix=/usr/local/extundelete        ##进行配置,指定软件安装(工作)目录
Configuring extundelete 0.2.4
Writing generated files to disk
[root@localhost extundelete-0.2.4]# make && make install        ##编译完成后进行安装
...略
[root@localhost extundelete-0.2.4]# cd /usr/local/extundelet
[root@localhost extundelet]# ls
bin
[root@localhost extundelet]# cd bin/
[root@localhost bin]# ls
extundelete
[root@localhost bin]# ln -s /usr/local/extundelet/bin/extundelete /usr/bin/        ##创建软链接,把前者文件放入/usr/bin目录中,让系统能识别extundelete的所有命令

2.削除をシミュレートする

  • / test /ディレクトリに戻り、ディレクトリに新しいファイルを作成します( "echo"は出力を意味し、aの内容で4つのファイルを作成するのと同じです)
[root@localhost bin]# cd /test/
[root@localhost test]# echo a>a
[root@localhost test]# echo a>b
[root@localhost test]# echo a>c
[root@localhost test]# echo a>d
[root@localhost test]# cat a
a
[root@localhost test]# cat b
a
[root@localhost test]# cat c
a
[root@localhost test]# cat d
a
[root@localhost test]# ls
a  c  extundelete-0.2.4          lost+found
b  d  extundelete-0.2.4.tar.bz2
  • ファイルシステム/ dev / sdb1にどのファイルが存在するかを確認します。iノードは2から始まり、2はファイルがシステムの最初のディレクトリであることを意味します。
[root@localhost test]# extundelete /dev/sdb1 --inode 2
...略
Would you like to continue? (y/n) 
y        ##你想继续吗,输入y继续
...略
File name                                       | Inode number | Deleted status
.                                                 2
..                                                2
lost+found                                        11
extundelete-0.2.4.tar.bz2                         12
extundelete-0.2.4                                 1921
a                                                 13
b                                                 14
c                                                 15
d                                                 16
##只列出关键内容,这里可以看到a、b、c、d的inode号都有了
  • ファイルaとファイルbを削除した後、「ls」はファイルaとbがないことを検出し、「extundelete / dev / sdb1 --inode 2」コマンドを入力すると、ファイルaとbが削除済み状態になっていることがわかります。
[root@localhost test]# rm -rf a b
[root@localhost test]# ls
c  extundelete-0.2.4          lost+found
d  extundelete-0.2.4.tar.bz2
[root@localhost test]# extundelete /dev/sdb1 --inode 2
...略

3.リカバリ操作を実行します

  • 最初にホームディレクトリに戻り、/ test /をアンマウントしてから、を使用して/ dev / sdb1ファイルシステムの下のすべてのコンテンツを復元します。このコマンドを実行すると、現在のディレクトリに新しいディレクトリが表示され、復元されたファイルが保存されます。
    マーク
  • extundeleteには多くの使用法があり、興味のある学生はヘルプを通じてより詳細な使用法を確認できます
  • ファイルが誤って削除された後、inode番号が上書きされた場合(ディレクトリがいっぱいになったりフォーマットされたりした場合)、ファイルを取得して復元することはできません。

3つ、xfsタイプのファイルのバックアップとリカバリ

1。概要

  • 注:これは別のタイプであり、直接削除および復元するのではなく、バックアップおよび復元します。
  • CentOS7はデフォルトでxfsタイプのファイルを使用し、xfsタイプのファイルはxfsdumpおよびxfsrestoreツールを使用してバックアップおよび復元できます。
    • xfsdumpには2つのバックアップレベルがあります:0は完全バックアップを意味します:1-9は増分バックアップを意味します
    • インクリメンタルバックアップ:バックアップが完了した後、ディスクに新しいコンテンツがある場合、完全バックアップを再度実行するのではなく、新しいコンテンツのみをバックアップします。
    • xfsdumpのデフォルトのバックアップレベルは0です。

2.コマンド形式

xfsdump -f 指定备份存放位置 要备份的路径或设备文件

3.一般的なオプション

  • -f:バックアップファイルディレクトリを指定します
  • -L:セッションラベルを指定します(指定しない場合は、直接入力するように求められます)
  • -M:デバイスラベルを指定します
  • -s:単一のファイルをバックアップします(パスを直接続けることはできません)

4.使用制限

  • マウントされたファイルシステムのみをバックアップできます
  • 操作するにはルート権限を使用する必要があります
  • XFSファイルシステムのみをバックアップできます
  • バックアップ後のデータは、xfsrestoreでのみ解析できます

5.操作手順

  • + 10Gのサイズで新しいパーティション/ dev / sdb2を作成し(オプション)、xfsとしてフォーマットし、新しく作成された/ data /ディレクトリにマウントします。
[root@localhost ~]# mkfs.xfs /dev/sdb2
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/sdb2 /data/
##可以df-Th检查一下
##注:记得之前说过的,若是这里格式化没有出来sdb2,要重启系统或者刷新一下
  • / data /ディレクトリに入り、ファイルをそのディレクトリにコピーしてから、そのディレクトリにディレクトリを作成し、そのディレクトリにファイルを作成します。
[root@localhost ~]# cd /data/
[root@localhost data]# cp /etc/passwd ./
[root@localhost data]# ls
passwd
[root@localhost data]# mkdir xcf
[root@localhost data]# touch xcf/xcf.txt
[root@localhost data]# ls
passwd  xcf
[root@localhost data]# ls -R
.:
passwd  xcf

./xcf:
xcf.txt        ##创建成功(子目录和他的文件)
  • 「xfsdump」を使用して、パーティション全体(/ dev / sdb2)をディレクトリ(/ opt / dump_sdb2)にバックアップします。
[root@localhost data]# rpm -q xfsdump        ##首先查询一下“xfsdump”软件包有没有安装,一般都是安装了,没有则安装一下
xfsdump-3.1.4-1.el7.x86_64
[root@localhost data]# xfsdump -f /opt/dump_sdb2 /dev/sdb2
##输入此命令后,会提示输入我的标签,而标签就是这个文件名,我们输入“dump_sdb2”按回车
##之后又会提示让我们输入设备,输入“sdb2”就行了
[root@localhost data]# cd /opt/
[root@localhost opt]# ls
dump_sdb2  rh        ##备份成功
  • 「xfsrestore」コマンドを使用して、データ損失をシミュレートし、ファイルを復元します
[root@localhost opt]# cd -
/data
[root@localhost data]# ls
passwd  xcf
[root@localhost data]# rm -rf *
[root@localhost data]# ls
[root@localhost data]# xfsrestore -f /opt/dump_sdb2 ./
...略
[root@localhost data]# ls
passwd  xcf        ##检查一下是否成功恢复
[root@localhost data]# cd xcf/
[root@localhost xcf]# ls
xcf.txt        ##OK~

第四に、ログファイルを分析します

1.ログ機能

  • ログファイルは、Linuxシステムのさまざまな操作情報を記録するために使用されるファイルであり、「日記」に相当します。
  • さまざまなログファイルに、ユーザーのログイン時間、プログラムエラーなど、さまざまな種類の情報が記録されます。
  • ログを読み取ることにより、システム障害の診断と解決に役立ちます(文書化)
  • さらに、ホストがハッカーに攻撃された場合、ログファイルは、ハッカーが残した痕跡を見つけるのにも役立ちます(ブルートフォースが複数のパスワードを解読してログインしようとするなど)

2.ログの分類

Linuxシステムでは、ログデータには主に次の3つのタイプが含まれます。

  • カーネルとシステムのログ:
    • メイン構成ファイル/etc/rsyslog.confの設定に従って、システムサービスrsyslogによる統合管理により、カーネルメッセージおよびさまざまなシステムプログラムメッセージをログに記録する場所を決定します。
    • システム内のかなりの数のプログラムがログファイルをrsyslogログ管理に渡すため、これらの形式は基本的に同じです。
  • ユーザーログ:
    • システムユーザーのログインおよびログアウト情報を記録する
    • ユーザー名、ログイン端末、ログイン時間、ソースホスト、使用されているプロセスなどを含みます。
  • プログラムログ:
    • このプログラムの実行中にさまざまなイベント情報を記録するために使用されます
    • さまざまなアプリケーションによって個別に管理されるログファイル、レコード形式が統一されていない
  • Linuxオペレーティングシステム自体とほとんどのサーバープログラムのログファイルは、デフォルトで/ var / logディレクトリに配置されます。

3.一般的なログファイル

  • Linuxシステムのログファイルについては、それぞれの用途を理解して、必要なときに問題をより迅速かつ正確に見つけ、さまざまな障害を時間内に解決できるようにする必要があります。一般的なログファイルをいくつか示します。
ログファイル 前書き
カーネルお​​よびパブリックメッセージログ:/ var / 1og / messages 起動、IOエラー、ネットワークエラー、プログラム障害など、さまざまなアプリケーションのLinuxカーネルメッセージとパブリックログ情報を記録します。
スケジュールされたタスクログ:/ var / log / cron crondスケジュールタスクによって生成されたイベント情報を記録します
システムブートログ:/ var / 1og / dmesg 起動プロセス中にLinuxシステムのさまざまなイベント情報を記録します
#メールシステムログ:/ var / log / maillog システムに出入りする電子メールアクティビティをログに記録する
ユーザーログインログ:/ var / 1og / secure ユーザー認証に関連するセキュリティイベント情報を記録する
/ var / log / lastlog 各ユーザーの最近のログインイベントを記録します。バイナリ形式
/ var / log / wtmp 各ユーザーのログイン、ログアウト、システムの起動とシャットダウンのイベントを記録します。バイナリ形式(とにかく読むことはできません)
/ var / run / btmp ログの失敗と不正なログイン試行および検証イベント;バイナリ形式
  • ログを表示するには、ディレクトリ「vimtarget」を入力します

4.ログファイル分析

  • システム内の主なログファイルに慣れたら、ログファイルの分析方法を紹介しましょう。
  • ログファイルを分析する目的は、ログを参照して重要な情報を見つけたり、サーバーをデバッグしたり、障害の原因を特定したりすることなどです。
  • テキスト形式のほとんどのログファイル(カーネルログやシステムログ、ほとんどのプログラムログなど)の場合、tail、more、less、catなどのテキスト処理ツールを使用してログの内容を表示できます。
  • バイナリ形式の一部のログファイル(ユーザーログなど)では、特徴的なクエリコマンドを使用する必要があります

5.カーネルとシステムのログ

  • システムサービスrsyslogによる統合管理
    • パッケージ:rsyslog-7.4.7-16.el7.x86_ 64
    • 構成ファイル:/etc/rsyslog.conf
    • メインプログラム:/ sbin / rsyslogd
  • 「vim / etc / rsyslog.conf」と入力して、構成ファイルを入力および表示します
    • 「* .info」は、情報レベル以上のすべての情報が対応するログファイルに書き込まれることを意味します
    • 「Mail.none」は、何かに関する情報がログファイルに書き込まれないことを意味します
      マーク
  • Linuxシステムカーネルログメッセージの優先度レベル(数値レベルが小さいほど、優先度が高くなり、メッセージの重要性が高くなります):
優先 説明
0 EMERG(緊急):ホストシステムが使用できなくなる状況
1 アラート:すぐに解決する必要がある問題
2 CRIT(深刻):より深刻な状況
3 ERR(エラー):操作中にエラーが発生しました
4 警告:システム機能に影響を与える可能性があり、ユーザーに通知する必要がある重要なイベント
5 注意(注):通常の機能には影響しませんが、イベントに注意を払う必要があります
6 情報:一般情報
7 DEBUG(デバッグ):プログラムまたはシステムのデバッグ情報など。
  • 通常、実際の使用では、ERR(3、エラー)レベルまで記録できますが、すべての情報をログに記録することはできません。効率を上げるために、重要なもの(通常のログまたはエラーログなど)のみを記録してください。これはエラーログです。失敗に何が起こったかを確認してください)

6.ログレコードの一般的な形式

  • カーネルお​​よびほとんどのシステムメッセージはパブリックログファイル/ var / log / messagesに記録されますが、他のプログラムメッセージは独自の独立したログファイルに記録されます。さらに、ログメッセージは特定のストレージデバイスに記録することもできます。指定したユーザーに直接送信する
  • / var / log / messagesファイルの内容を次のように表示します
    マーク
    ...省略
  • 各行はログメッセージを表し、各メッセージには4つのフィールドが含まれます
    • 時間ラベル:メッセージが送信された日時
    • ホスト名:メッセージを生成したコンピューターの名前
    • サブシステム名:メッセージを発行したアプリケーションの名前
    • メッセージ:メッセージの特定の内容
  • 場合によっては、rsyslogを設定して、ログファイルをファイルに記録しながら、印刷用にログ情報をプリンターに送信することができます。これにより、ネットワーク侵入者がログをどのように変更しても、侵入のトレースをクリアできません。
  • rsyslogは、攻撃されることが多い主要なターゲットです。rsyslogが破壊されると、管理者が侵入や侵入の痕跡を見つけるのが困難になるため、デーモンと構成ファイルの監視に特に注意してください。

7.ユーザーログ分析

  • 保存されたユーザーのログインおよびログアウト情報
    • / varl / log / lastlog:最近のユーザーログインイベント
    • / var / log / wtmp:ユーザーのログイン、ログアウト、システムの起動とシャットダウンのイベント
    • / var / run / utmp:現在ログインしている各ユーザーの詳細情報
    • / var / log / secure:ユーザー認証に関連するセキュリティイベント
  • これらのファイルはバイナリデータファイルです。tailなどのテキスト表示ツールを直接使用して参照することはできません。ログ情報を取得するには、users、who、w、last、lastbなどのユーザークエリコマンドを使用する必要があります。
    • userコマンドは、現在ログインしているユーザーの名前を出力するように指示します。表示される各ユーザー名はログインセッションに対応します。ユーザーが複数のログインセッションを持っている場合、そのユーザー名は同じ回数表示されます。
    • whoコマンドは、現在システムにログインしている各ユーザーの情報を報告するために使用されます。このコマンドを使用すると、システム管理者は、現在のシステムに存在する不正なユーザーを表示して、それらを監査および処理できます(whoのデフォルト出力にはユーザー名が含まれます。端末タイプ、ログイン日、リモートホスト)
    • wコマンドは、現在のシステムの各ユーザーとユーザーが実行しているプロセスに関する情報を表示するために使用され、出力コンテンツはより豊富になります
    • 最後のコマンドは、システムに正常にログインしたユーザーレコードを照会するために使用されます。最新のログインステータスが上部に表示されます。権限のないユーザーがログインしている場合は、侵入されたことがわかります。
    • lastbコマンドは、失敗したログインのユーザーレコードを照会するために使用されます。誰かがパスワードを強引に解読しているかどうかに注意を払うことができます。また、セキュリティログ/ var / log / secure(tail / var / log / secure)で関連情報を取得することもできます。

8.プログラムログ分析

  • Linuxシステムでは、かなりの数のアプリケーションがrsylogサービスを使用してログを管理せず、代わりにプログラム自体によってログレコードを維持します。
    • httpdウェブサイトサービスプログラム(ウェブサービス):/ var / log / httpd /
    • 次の2つのログファイルに記録します
      • access_ log //顧客アクセスイベントを記録する
      • error_ log //エラーイベントを記録する
    • プロキシサービス(ユーザーが再度アクセスするためのキャッシュサーバーメカニズムに相当し、サーバーの同時負荷を軽減します):/ var / log / squid /
      • access.log、cache.log
  • プログラムごとにログレコードの形式が大きく異なり、厳密に統一された形式がないため、ここでは詳しく説明しません。
  • ログファイルは動的に書き込まれ、見ている間は常に書き込みを行っています。ログは大きくなり続けるため、表示に影響します。現時点では、表示するための専門的なログ分析ツールが必要です(関心があります)。学生はそれについてもっと学ぶことができます)

9.ログ管理戦略(要約)

  • 一般に、プロのシステム管理者は、常に警戒し、あらゆる種類の疑わしい状況に注意を払い、さまざまなシステムログファイルを定期的にチェックし、タイムリーなバックアップとアーカイブを作成する必要があります。
  • これらのログを確認するときは、不合理な場所が見つかったら、すぐに記録してください
  • バックアップなどの操作により、ログの保存時間を延長します(自分で表示するのに便利で、他の人にも便利ですか?)
  • ログアクセス権の制御(アカウント番号、パスワード、パスワードなどの機密情報など)
  • ログの一元管理
    • サーバーのログファイルを統合ログファイルサーバーに送信します(私たちが見つけるために)
    • これにより、ログ情報の統合された収集、並べ替え、および分析が容易になります。
    • 偶発的な損失、悪意のある改ざん、またはログ情報の削除を効果的に防止します
  • さらに、ログは完全に信頼できない場合があります。古くて熟練したハッカーは、侵入後にシーンを完全にクリーンアップします。
  • したがって、要約すると、上記のシステムコマンドを上手かつ柔軟に適用し、包括的かつ包括的なレビューとテストを実施し、文脈から外すことを忘れないでください。
  • さあ、学ぶのが大好きな学生たち!

おすすめ

転載: blog.csdn.net/weixin_51486343/article/details/110564983