$更新されましたb
SCSI 関連のドライバーを探す
$ scsi*.ko を見つけます
USB関連のドライバーを探す
$ usb*.ko を見つけます
これらのドライバーは、
.koは接尾辞であり、システムのインストール時にデフォルトでモジュールにコンパイルされます。実際、これらはカーネルの一部としてコンパイルできます。必要なのは、カーネルのコンパイル時に選択することだけです。
[*]それでおしまい。ただし、多くの場合、それらはモジュールとしてコンパイルされるため、カーネルのサイズが削減され、必要に応じてロードおよびアンロードする柔軟性が得られます。以下に、モジュールのアンロード、モジュールのロード、およびロードされたモジュールのステータスの表示方法を簡単に示します。
可
/procファイルシステム
モジュールファイルを使用して、カーネルにロードされたさまざまなモジュールのステータスを確認するか、
lsmodコマンドを使用してそれらを直接表示します。
$ cat /proc/modules
または
$lsmod
SCSI および USB 関連のドライバーを確認します。結果は、モジュール名、モジュール サイズ、他のモジュールによって参照されているものとしてリストされます (参照の数、それらを参照するモジュール)。
$ lsmod | usbusbhid 29536 0hid 28928 1 usbhidusbcore 138632 4 usbhid、ehci_hcd、ohci_hcdscsi_mod 147084 4 sg、sr_mod、sd_mod、libata
以下からアンインストールしてください
ウスヒドモジュールを見てください (SCSI ドライバーをアンインストールしないでください。システムがその上で実行される可能性があるためです。本当にそれで遊びたい場合は、アンインストールする前にデータを保存することを忘れないでください)。
rmmodこれは、次のコマンドを実行することで実現できます。まず、root ユーザーに切り替えます。
$ sudo -s# rmmod usbhid
モジュール情報を再度確認してください。表示されなくなりました。
$ lsmod ^usbhid
USB マウスをお持ちの場合、それを動かしてみると、マウスを動かすことができないことに気づきましたか?デバイスドライバーが入手できなくなったため、デバイスを使用できません。しかし、理由が分かったので心配する必要はありません。次のコマンドを使用してドライバーをリロードしてください。
インモッドバンドル
ウスヒドモジュールがリロードされます。
$ sudo -s# insmod `usbhid.koを見つける`
usbhid.koを見つける知ることです
usbhid.koモジュールへのパス (以前に存在しなかった場合)
更新されましたb, これを使って見つけることはできないと思いますが、直接アクセスすることもできます。
/lib/モジュールディレクトリで使用される
探すバンドル
usbhid.koファイルが見つかりました。
# insmod $(find /lib/modules -name *usbhid.ko* | grep `uname -r`)
これでマウスが再び使用できるようになります。信じられない場合は、もう一度マウスを動かしてください:-)
この時点で、ハードウェア デバイスとデバイス ドライバーの関係は比較的明確になっているはずです。そうでない場合は、以下に進みます。
Linux デバイス ドライバーは、対応するデバイス ファイルに関連付けられており、デバイス ファイルはハードウェア デバイスと 1 対 1 に対応します。これらのデバイス ファイルはシステムに均一に保存されます。
/dev/ディレクトリ。
たとえば、SCSI デバイスは次のようになります。
/dev/sda、
/dev/sda1、
/dev/sda2...以下のデバイス情報をご覧ください。
$ ls -l /dev/sda*brw-rw---- 1 ルートディスク 8, 0 2007-12-28 22:49 /dev/sdabrw-rw---- 1 ルートディスク 8, 1 2007-12- 28 22:50 /dev/sda1brw-rw---- 1 ルート ディスク 8、3 2007-12-28 22:49 /dev/sda3brw-rw---- 1 ルート ディスク 8、4 2007-12-28 22:49 /dev/sda4brw-rw---- 1 ルート ディスク 8、5 2007-12-28 22: 50 /dev/sda5brw-rw---- 1 ルートディスク 8、6 2007-12-28 22:50 /dev/sda6brw-rw---- 1 ルート ディスク 8、7 2007-12-28 22:50 /dev/sda7brw-rw---- 1 ルート ディスク 8、8 2007-12-28 22: 50/dev/sda8
最初の列の最初の文字が
b、5 列目は数字の 8 です。
bファイルがブロック デバイス ファイルであることを示します。
cキャラクターデバイス (`/dev/ttyS0 など) を意味します。ブロックデバイスとキャラクターデバイスの違いについては、次を参照してください。
キャラクタ デバイス: キャラクタ デバイスは、バイト ストリームのようにアクセスできるデバイスです。キャラクタ ターミナルとシリアル ポートはキャラクタ デバイスです。
ブロックデバイス: ファイルシステムはブロックデバイスに収容できます。キャラクタ デバイスとは異なり、ブロック デバイスは読み取りまたは書き込み時に一度に 1 つ以上の完全なブロックのみを転送できます。 Linux オペレーティング システムでは、アプリケーションはキャラクタ デバイスと同じようにブロック デバイスの読み取りと書き込みを行うことができます (一度に任意のバイトのデータを読み書きすることができます)。したがって、ブロックデバイスとキャラクタデバイスの違いは、カーネル内のデータの管理のみです。
数字 8 は、カーネル内のハードウェア デバイスに対応するデバイス番号です。これは、カーネルの中で見つかります。
ドキュメント/devices.txtそして
/proc/デバイスファイル内でデバイス番号の割り当てを見つけます。しかし、なぜ同じデバイスが異なるデバイス ファイルに対応するのでしょうか (
/dev/sda最後の数字が違うのはなぜですか?
ls結果の列 6 がそれらに対応します)。これは実際には、さまざまなデバイスのさまざまな部分を区別するためです。ハードドライブの場合、これはハードドライブ内のさまざまなパーティションを処理します。カーネルに関する限り、列 5 のデバイス番号を通じて対応するハードウェア デバイスを見つける必要があるだけですが、ドライバー モジュールの場合は、さまざまなパーティションを処理する方法を知る必要があるため、追加の補助デバイス番号が存在します。 、つまり列 6 に対応するコンテンツです。このように、デバイスにはメジャー デバイス番号 (列 5) と補助デバイス番号 (列 6) が含まれるため、さまざまなハードウェア デバイスの管理が容易になります。
デバイスファイルはハードウェアに対応しているため、直接アクセスできます。
/dev/sda(の場合
IDEハードドライブの場合、対応するデバイスは次のとおりです。
/dev/hda(la) デバイスからハードディスク情報を読み取ります。次に例を示します。
使用
DDこのコマンドはハードディスクの最初の 512 バイトをコピーし、root ユーザーが必要です
$ sudo dd if=/dev/sda of=mbr.bin bs=512 count=1
使用
ファイル対応する情報を表示するコマンド
$ ファイル mbr.binmbr.bin: x86 ブート セクター、LINUX i386 ブート ローダー; パーティション 3: ID=0x82、スタートヘッド 254、スタートセクター 19535040、1959930 セクター;オフセット0x48
も使用できます
ODコマンドは 16 進形式で読み取られ、解析されます。
$ od -x mbr.bin
BSブロックのサイズです(バイト単位)
バイト単位として)、
カウントはブロックの数です
この情報は直観的ではないため (以下でさらに分析します)、最初に別のデバイス ファイルを見てみましょう。これにより、デバイス ファイルとハードウェア間の対応関係を非常に直観的に示すことができます。マウスを例に、マウスに対応するデバイスファイルの情報を読み込んでみましょう。
$ sudo -s# cat /dev/input/mouse1 | od -x
マウスドライバーが異なる可能性があるため、デバイスファイルは別のものになる可能性がありますが、すべて
/dev/入力下。
マウスを移動して、異なる情報が出力されるかどうかを確認します。この原則に基づいて、多くの場合、一方の側でデバイス ファイルを読み取ります。
/dev/ttyS0相手側のデバイス ファイルのコンテンツ
/dev/ttyS0内容を書き込み、シリアルポート回線が破損していないか確認してください。
この時点で、デバイス ドライバー、デバイス ファイル、ハードウェア デバイスの関係にさらに感動するはずです。デバイス ドライバーの動作原理とデバイス ドライバーの作成について深く理解したい場合は、以下にリストされている関連情報を参照して、デバイス ドライバーの作成プロセスを開始してください。
参考文献:
Linux カーネル 2.6 をコンパイルする
Linux システム用のハードウェア ドライバー作成の原則
Linux における USB デバイスの原理、構成、および一般的な問題
Linux カーネル モジュール プログラミング ガイド
Linuxデバイスドライバー開発
実際には、メモリ、USB ディスクなどをファイル システムの基礎となる「ストレージ」デバイスとして使用できますが、ここではディスクとパーティションの関係を紹介するための例としてハードディスクのみを使用します。
現在、Linux のパーティショニングは、最初の PC のハードディスクで使用されていたパーティショニングの原則を依然として採用しています。このパーティショニングの原則を以下で段階的に分析して説明します。
まず、いくつかの概念を見てみましょう。
デバイスの管理とパーティショニング
Linux では、各ストレージ デバイスは、ハードディスクなどのシステム デバイス ファイルに対応します。
IDEそして
SCSIデバイス、システム内
/dev対応する含まれる文字はディレクトリ内にあります。
hdそして
SDデバイスファイル。ハードディスクが接続されているマザーボードデバイスインターフェイスとデータケーブルインターフェイスに応じて、
hdまたは
SD文字の後に、から文字を追加できます
ある到着
zキャラクター、たとえば
hda、
HDB、
HDCそして
sda、
SDB、
sdcさらに、同じハードウェア デバイスの異なるパーティションを区別するために、最後に番号を追加できます。たとえば、
hda1、
hda2、
hda3そして
sda1、
sda2、
sda3、それで、
/devディレクトリにあると、同様のデバイス ファイルが多数表示されます。
各パーティションの役割
パーティションを分割する場合、プライマリ パーティションと論理パーティションの問題がよく発生します。これは、後で論理ボリュームを導入することで複数のハードディスクをより適切に管理できるようにするためです。パーティション管理が簡単に行えます。
Linux システムの各ハードディスク デバイスは、最大 4 つのプライマリ パーティション (拡張パーティションを含む) で構成されます。
プライマリ パーティションはコンピュータがオペレーティング システムを起動するために使用するため、各オペレーティング システムのスタートアップ プログラム、つまりブート プログラムはプライマリ パーティションに保存する必要があります。 Linux では、プライマリ パーティション (または拡張パーティション) が最初の 4 つのパーティション番号を占めることが規定されています。したがって、プライマリ パーティションに対応するデバイス ファイルが
/dev/hda1-4または
/dev/sda1-4、 それよりも
hda5または
sda5。
拡張パーティションは、より多くの論理パーティションを拡張するために使用されます。Linux では、論理パーティションが占有します。
hda5-16または
sda5-1612 個の数字を待ちます。
パーティションの種類
このパーティション上のファイル システムのタイプを指定します。 Linux は、msdoc、vfat、ext2、ext3 などの多くのファイル システム タイプをサポートしています。詳細については、次のセクションで詳しく説明します。
次に、ハードディスクの最初の 512 バイトを分析します。
MBR) パーティションを分析して理解します。
まずはこの写真を見てみましょう。
説明するために使用されます
MBR構造。
MBR512 バイトのうち、ブート部分、パーティション テーブル、エンド マーク `(55AAH) を含めると、それぞれ 446 バイト、64 バイト、2 バイトを占めます。ここでは、パーティション テーブル部分、つまり図の中央の 64 バイトと左側の部分のみに注目します。
使っているので
SCSIハードドライブ、以下より
/dev/sdaハードディスクの最初の 512 バイトをデバイス内のファイルにコピーします
mbr.bin真ん中。
$ sudo -s# dd if=/dev/sda of=mbr.bin bs=512 count=1
以下を使用してください
ファイル、
OD、
fdiskコマンドがこの段落を分析するまで待ちます
MBRデータを確認し、上のグラフと比較するとより理解が深まります。
$ ファイル mbr.binmbr.bin: x86 ブート セクター、LINUX i386 ブート ローダー; パーティション 3: ID=0x82、スタートヘッド 254、スタートセクター 19535040、1959930 セクター;オフセット0x48$ od -x mbr.bin | tail -6 #中間の 64 バイトのみに注目するため、結果の最後の 6 行がインターセプトされます 0000660 0000 0000 0000 0000 a666 a666 0000 01800000700 0001 fe83 ffff 003f 0000 1481 012a 00000000720 0000 0000 0000 0000 0000 0000 0000 fe000000740 ffff fe82 ffff 14c0 012a e7fa 001d fe000000760 ffff fe05 ffff fcba 0147 9507 0360 aa55$ sudo -s# fdisk -l | grep ^/ #MBR 関連部分のみを分析し、論理パーティション部分は分析しない /dev/sda1 * 1 1216 9767488+ 83 Linux/dev/sda3 1217 1338 979965 82 Linuxスワップ/Solaris/dev/sda4 1339 4865 28330627+ 5 拡張
ファイルコマンドの結果は、コピーしたばかりの 512 バイトがブート セクターであり、セミコロンで区切られた部分が
ブートローダー、パーティション 3 とパーティション 4。パーティション 3 のタイプは 82、つまり
スワップパーティション (次の方法で実行できます)
fdisk命令する
私関連情報をリストするコマンド)、これは以下に相当します。
fdiskの結果で
/dev/sda3行の 5 列目では、パーティション 3 のセクター数は 1959930 で、バイトに換算すると次のようになります。
1959930*512(現在、ハードドライブのデフォルトのセクターサイズは 512 バイトです)。
スワップパーティションのデフォルトのブロック サイズは 1024 バイトであるため、ブロック数は
:
$ エコー 1959930*512/1024 |
その通り
fdisk結果は次のとおりです
/dev/sda3同様に、行の 4 列目に対応するブロックの数を比較できます。
fdiskそして
ファイル結果はパーティション 4 について分析されます。
もう一度見てみましょう
ODコマンドの結果は 16 進数で表示されます。パーティション 3 も考慮します。計算の結果、パーティション 3 が対応することがわかります。
ODコマンドの結果は次のようになります。
fe00 ffff fe82 ffff 14c0 012a e7fa 001d
1つ目はパーティションマークです。
00H上の図から、ブート パーティションではないことがわかります (
80Hマークされているのはブート パーティションです)、パーティション タイプはどうなるのでしょうか?のために
82H、そして
ファイル表示結果は一貫しています。次に、パーティションのサイズに注目してみましょう。
ファイル結果内のセクターの数。
$ echo ibase=10;obase=16;1959930 |
ちょうど対応してる
e7fa001d、同様にブート パーティションの結果を検討してください。
0180 0001 fe83 ffff 003f 0000 1481 012a
パーティションタグ:
80Hこれは、このパーティションがブート パーティションであることを反映しており、その後にブート パーティションが配置されているディスク セクタの状況、010100、つまり 1 サイド、0 トラック、1 セクタが続きます。他のコンテンツも比較・分析できます。
時間の制約を考慮して、詳細については、以下の情報またはシステムの関連マニュアルを参照してください。
補足:システムをインストールする際に使用できるのは、
fdisk、
cfdiskコマンドがパーティション化されるまで待ちます。特定のパーティションから起動したい場合は、次のように入力する必要があります。
80Hタグ、たとえば
cfdiskパーティションを設定する
ブート可能達成するために。
参考文献:
Linuxブートプロセス内
独自の OS の開発: ブート
Redhat9 ディスク パーティションの概要
Linuxパーティションのハウツー
論理ボリュームが導入される前は、パーティション タイプとファイル システム タイプはほぼ同等に扱われ、パーティション タイプを設定するプロセスは、パーティションをフォーマットし、対応するファイル システム タイプを確立するプロセスでした。
以下では主に、パーティションとファイル システム タイプの関係を確立する方法、つまり指定したファイル システム タイプでパーティションをフォーマットする方法を紹介します。
まず、Linux で一般的なファイル システムのタイプを見てみましょう (Linux でサポートされているすべてのファイル タイプを表示したい場合は、次のコマンドを使用できます)
fdisk命令する
私表示または渡すコマンド
男表示するには、以下を使用することもできます
/proc/ファイルシステム現在のカーネルでサポートされているファイル システム タイプを確認してください)
内線2、
内線3、
内線4: これら 3 つは、Linux ルート ファイル システムで一般的に使用されるタイプです。
スワップ: これは、Linux 仮想メモリを実装するために使用されるファイル システムであり、通常、インストール中に特別なパーティションを作成し、次のようにフォーマットする必要があります。
スワップファイル システム (さらに追加したい場合)
スワップパーティション分割については、このセクションの参考資料を参照して理解してください。
DD、
エムクスワップ、
スワポン、
スワップオフ他のコマンドの使用法)
プロシージャ: これは、カーネルとユーザーの間のインターフェイスとして存在し、メモリ内に構築される比較的特殊なファイル システムです (
猫コマンドビュー
/procシステム下のファイルは、次の方法で変更することもできます。
/proc/sys以下のファイルはカーネル構成をリアルタイムで調整できることを前提としています。
プロシージャファイル システム マウント上で次のようにします。
マウント -t proc proc /proc
上記のファイル システム タイプに加えて、Linux サポートには以下が含まれます。
vfat、
イソ、
xfs、
NFS一般的なファイル システムにはさまざまな種類がありますが、Linux では、Windows などの他のオペレーティング システムで使用されているファイル システムを自由に表示および操作できます。
では、ディスクとこれらのファイル システム タイプの間の関連付けをどのように確立するのでしょうか?形式。
フォーマットプロセスは、実際にはパーティションを再編成するプロセスです。
mkfs達成するコマンドはもちろん渡すこともできます
fdiskコマンドが実装されるまで待ちます。ここでは紹介するだけですが、
mkfs、
mkfs既存のパーティションをフォーマットするために使用できますが、パーティション操作を実行することはできません (ディスクをパーティション化してフォーマットしたい場合は、
fdisk)。フォーマット後、対応するパーティション上のデータは特別なファイル システム タイプごとに編成されます。
例:
/dev/sda9パーティションは次のようにフォーマットされます
内線3ファイルシステム。
$ sudo -s# mkfs -t ext3 /dev/sda9
各パーティションのファイル システム タイプを一覧表示したい場合は、次を使用できます。
fdisk -l注文。
詳細については、以下の資料を参照してください。
参考文献:
Linux でスワップ パーティションをロードする手順
Linux での ISO イメージ ファイルの作成と書き込み
RAM ディスク パーティションの説明:[1]、[2]
アドバンスト ファイル システム実装者ガイド
前のセクションでは、パーティションを特定のファイル システム タイプとして直接フォーマットしましたが、新しいストレージ デバイスを拡張する必要性を考慮して、開発者はファイル システムとパーティションの間に論理ボリュームを導入しました。時間の都合上、ここでは詳しく説明しません。参考文献「Linux 論理ボリューム管理の詳細説明」を参照してください。
ファイル システムが最終的に提示するのは視覚的な構造であり、ls、find、tree などのコマンドを使用して提示できます。それは「木」を逆さまにしたようなもので、木のノードに新しい「木」を取り付けることができます。
以下に、ファイル システムのマウントについて簡単に説明します。
ファイル システムはデバイス (
マウント) をマウント ポイントと呼ばれるディレクトリにコピーします。興味深いことに、Linux では、ディレクトリ自体を別のディレクトリにマウントでき、フォーマットされたファイルも特別なデバイスを介してマウントできます。
/dev/ループマウントする (例:
イソ書類)。さらに、ファイル システムに関する限り、Linux はローカル ファイル システムをサポートするだけでなく、リモート ファイル システム (たとえば、
NFS)。
以下に、ファイル システムのマウント例をいくつか簡単に紹介します。
ルートファイルシステムのマウント
マウントには Root 権限が必要です (システム ルート ファイル システムのマウントなど)。
/dev/sda1到着
/mnt
$ sudo -s# mount -t ext3 /dev/sda1 /mnt/
チェック
/dev/sda1マウント状況からわかるように、デバイスは複数回マウントできます。
$ mount | grep sda1/dev/sda1 on / type ext3 (rw,errors=remount-ro)/dev/sda1 on /mnt type ext3 (rw)
すでにマウントされているファイル システムの場合は、別の属性をサポートするために再マウントできます。
$ mount -n -o 再マウント、rw /
新しいデバイスをマウントする
カーネルがすでに USB インターフェイスをサポートしている場合は、USB フラッシュ ドライブを挿入するときに、次のように渡すことができます。
dmesg対応するデバイス番号を表示してマウントするコマンド。
チェック
dmesg結果の最後の数行については、次のようなものを見つけます。
/dev/sdNUSB ディスクに対応するデバイス番号を調べるための情報
$dmesg
ここでは、USB ディスクが
vfat一部の印刷所では Windows 上でも使用できる形式です
# mount -t vfat /dev/sdN /path/to/mountpoint_directory
ISO ファイルまたは CD をマウントする
一部の ISO ファイルまたは ISO 形式のディスクの場合は、次の方法も使用できます。
マウントマウントするコマンド。
iso ファイルの場合:
# mount -t iso9660 /path/to/isofile /path/to/mountpoint_directory
CDの場合:
# mount -t iso9660 /dev/cdrom /path/to/mountpoint_directory
リモートファイルシステムをマウントする
# mount -t nfs リモート IP:/共有ディレクトリへのパス /ローカルディレクトリへのパス
proc ファイルシステムをマウントする
# マウント -t proc proc /proc
プロシージャファイル システムはメモリ内で編成されますが、ディレクトリにマウントすることもできます。通常は取り付けます
/procディレクトリにあるため、一部のシステム管理および構成ツールがそれを使用できるようになります。例えば
トップコマンドはこれを使用してメモリ使用量を分析します (読み取り
/proc/meminfoそして
/proc/statなどのファイル);
lsmodカーネルモジュールのステータスを取得するためのコマンド (読み取り
/proc/モジュール);
ネット統計コマンドを使用してネットワークのステータスを取得します(読み取り
/proc/net/devおよびその他の文書)。もちろん、関連するツールを記述することもできます。また、調整することで、
/proc/sysディレクトリ内のファイルは、システム構成を動的に調整できます。
/proc/sys/net/ipv4/ip_forwardファイルに数値 1 を書き込むと、カーネルがパケット転送をサポートできるようになります。 (詳細については、を参照してください。
プロシージャヘルプ、
男「プロック」)
ディレクトリをマウントする
$ mount --bind /パス/to/needtomount_directory /パス/to/mountpoint_directory
これは非常に興味深いものです。たとえば、ディレクトリを FTP サービスのルート ディレクトリにマウントし、コンテンツをコピーせずに他のユーザーが共有できるように、対応するディレクトリ内のリソースを提供できます。
上記ではマウントのみを述べましたが、アンインストールするにはどうすればよいですか?使用
アンマウントコマンドの後に、マウントのソース アドレスまたはマウント ポイント (デバイス、ファイル、リモート ディレクトリなど) を指定するだけです。例えば:
$ umount /path/to/mountpoint_directory
または
$ umount /パス/to/mount_source
多数のサービスまたは頻繁にマウントされるサービスを管理する場合、毎回手動でマウントするのは賢明ではありません。今すぐ使えます
マウント設定ファイル
/etc/fstab、バンドル
マウント対応するパラメータは次のように記述されます。
/etc/fstabファイルに対応する列で一括マウントが可能です(
マウント -a) してアンインストール (
アンマウント -a)。
/etc/fstab列は、ファイル システム、マウント ポイント、タイプ、および関連オプションです。詳細については、を参照してください。
fstabヘルプ (
男fstab)。
参考文献:
Linuxハードディスクパーティションとそのマウント原理
ファイルI/OからLinux仮想ファイルシステムを見る
ソースコード解析:静的解析 Cプログラムの関数呼び出し図
Linux ファイル システムにはいくつかの基本ディレクトリがあり、異なる機能を持つさまざまなファイルが異なるディレクトリに格納されます。最も基本的なディレクトリは次のとおりです。
/等、
/lib、
/dev、
/binなど、システム構成ファイル、ライブラリファイル、デバイスファイル、実行可能プログラムをそれぞれ保存します。これらのディレクトリは通常、組み込み開発を行う場合に必要です。手動で行うか、使用する必要があります。
ビジーボックスこのような基本的なファイル システムをツールが作成するまで待ちます。ここでは、ファイル システムについての理解を深めるために、非常に単純なファイル システムを作成し、ファイル システムに対してさまざまな従来の操作を実行するだけです。
まだ覚えています
DD命令ですか?これを使用して固定サイズのファイルを生成するだけです。
1M(1024*1024バイト)ファイル
$ dd if=/dev/zero of=minifs bs=1024 count=1024
ここでファイルの種類を表示します
ミニフいっぱいです
\0特定のデータ構造を持たないファイル
$ ファイル minifsminifs: データ
例証します:
/dev/ゼロは非常に特別なデバイスです。これを読めば、いくらでも入手できます。
\0。
次に、ファイルは、指定されたファイル タイプのファイル システムにフォーマットされます。 (ファイルもフォーマットできるというのは信じられませんか? はい、デバイスだけでなく、ファイルも特定のファイル システム タイプで編成できます。ただし、一部のファイル システム (
内線3) ターゲットを少なくとも次のようにフォーマットする必要があります。
64M空間)。
$ mkfs.ext2 ミニフ
このときファイルの種類を確認してください。
ミニフただ取ってください
内線2ファイルシステムフォーマットの整理
$ file minifsminifs: Linux rev 1.0 ext2 ファイルシステム データ
ファイルはファイル システム タイプごとに編成されているため、次のことができます。
マウントコマンドを使用してマウントして使用します。
に切り替えてください
根ユーザーがマウントして渡す
-o ループ特定のデバイスに関連付けるオプション
/dev/ループ
$ sudo -s# mount minifs /mnt/ -o ループ
ファイル システム情報を表示すると、ディレクトリ ファイルが 1 つだけ表示されます。
紛失+発見
$ ls /mnt/紛失+発見
このファイル システムで、読み取り、書き込み、削除などのさまざまな通常の操作を実行します。 (各操作の前に、
ミニフ比較のためにファイルのコピーを保存し、関連情報と組み合わせることで、さまざまな操作によって引き起こされるファイル システムへの変更を詳細に分析することができ、それによってファイル システムの実装原理を深く理解することができます。データ整理など)
$ cp minifs minifs.bak$ cd /mnt$ touch hello$ cd -$ cp minifs minifs-touch.bak$ od -x minifs.bak > orig.od$ od -x minifs-touch.bak > touch.od
ファイルを作成した後、現在のファイル システムと以前のファイル システムの類似点と相違点を比較します。
$ diff orig.od touch.oddiff orig.od touch.od61,63c61,64< 0060020 000c 0202 2e2e 0000 000b 0000 03e8 020a< 0060040 6f6c 7473 662b 756f 646e 0000 0000 0000< 0060060 0000 0000 0000 0000 0000 0000 0000 0000---> 0060020 000c 0202 2e2e 0000 000b 0000 0014 020a> 0060040 6f6c 7473 662b 756f 646e 0000 000c 0000> 0060060 03d4 0105 6568 6c6c 006f 0000 0000 0000> 0060100 0000 0000 0000 0000 0000 0000 0000 0000
比較すると、ファイルが追加されると、ファイル システムの対応する場所が大幅に変更されることがわかりました。
$ echo hello、world > /mnt/hello
埋め込む
同期するコマンドを使用して、キャッシュ内のデータがディスクに書き込まれたことを確認します (このセクションの図 1 を思い出してください)
バッファキャッシュさて、こちらです
キャッシュのデータはディスクに書き込まれます)
$ sync$ cp minifs minifs-echo.bak$ od -x minifs-echo.bak > echo.od
ファイルの内容を書き込んだ後、ファイル システムと以前のファイル システムの類似点と相違点を比較します。
$ diff touch.od echo.od
ファイルシステム内の文字列を表示する
$ strings minifslost+foundhellohello、世界
消去
こんにちはファイル、ファイルシステムの変更を表示
$ rm /mnt/hello$ cp minifs minifs-rm.bak$ od -x minifs-rm.bak > rm.od$ diff echo.od rm.od
ファイル システム内の文字列を確認すると、ファイルが削除されたときにファイルの内容が上書きされていないことがわかりました。そのため、理論的には現時点でも内容はまだ回復可能です。
$ strings minifslost+foundhellohello、世界
上記では、ファイル システムを分析するためのいくつかの一般的なツールを示し、いくつかの一般的な操作を分析するだけです。ファイル システムの実装原理を深く理解したい場合は、上記のツールの使用方法に慣れ、関連資料を読んでください。
参考文献:
Linux でミニ ファイルシステムを最初から構築する
BusyBox を使用して Linux でミニ ファイルシステムを構築する
ext2 ファイルシステム
とともに
ヒューズFuse の登場により、ユーザー空間でファイル システムを開発できるようになりました。独自のファイル システムを開発したい場合は、「Fuse を使用して独自のファイル システムを開発する」を参照することをお勧めします。
2007 年 12 月 22 日、私は多くの情報を収集し、全体的な枠組みを書きました。
最初の草稿は 2007 年 12 月 28 日の午後に完成しました。時間の制約を考慮して、多くの詳細はこれ以上分析されていません。また、いくつかの部分については、批判と修正を歓迎します。
2007 年 12 月 28 日の夜、一部の情報が修正され、文書が正式に公開されました。
No. 29、デバイスドライバーとハードウェアデバイスに関するセクションを追加