ユーザー空間部分
デバイス マッパーはユーザー空間では比較的シンプルで、主にデバイス マッパー ライブラリと dmsetup ツールが含まれます。デバイス マッパー ライブラリは、デバイス マッパー論理デバイスを作成および削除するために ioctl およびユーザー空間に必要な操作をカプセル化したものです。 dmsetup は、デバイス マッパー デバイスの作成および削除に直接使用できるコマンド ライン ツールをユーザーに提供します。これらの機能とプロセスは比較的単純であるため、この記事では詳細は説明しません。 ユーザー空間は主に次の作業を担当します。
1. マッピングされた各デバイスに関連するターゲット デバイスを検出します。構成情報のマッピング テーブル
3. ユーザー空間によって構築されたマッピング テーブルをカーネルに渡し、マッピングされたデバイスに対応する dm_table 構造を構築させます。
4. 将来の再構築のために現在のマッピング情報を保存します。
以下では、主に例を通じて dmsetup の使用法を説明し、デバイス マッパーのマッピング メカニズムについてさらに説明します。ユーザー空間での最も重要な作業は、マッピング テーブルを構築して保存することです。マッピング テーブルの例をいくつか示します。
1) 0 1024 linear /dev/sda 204 1024 512 linear /dev/sdb 766 1536 128 linear /dev/sdc 0 2) 0 2048 striped 2 64 /dev/sda 1024 /dev/sdb 0 3) 0 4711 mirror core 2 64 nosync 2 /dev/sda 2048 /dev/sdb 1024
例 1 では、論理デバイスの 3 つのアドレスはセクター 0 ~ 1023、セクター 1024 ~ 1535、および 1536 です。 ~1663 の範囲は、/dev/sda デバイスのセクタ番号 204、/dev/sdb デバイスのセクタ番号 766、および /dev/sdc デバイスのセクタ番号 0 から始まる領域にマッピングされます。線形マッピング方式。
例2では、論理デバイスのセクタ0から始まる2048セクタのセグメントが、/dev/sdaデバイスの1024セクタ目と/dev/sdbデバイスのセクタ0からストライプ状にマッピングされています。 。同時に、このストライプ タイプのターゲット ドライバーには論理デバイスにマップされた 2 つのストライプ デバイスがあり、ストライプのサイズは 64 セクターであることをカーネルに伝えます。そのため、ドライバーはこの値を使用して IO リクエストをデバイス間で分割できます。 。例 3 では、論理デバイスのセクター 0 から始まる 4711 セクターのセグメントが、/dev/sda デバイスの 2048 セクターと /dev/sdb デバイスの 1024 セクターにミラーリング方式でマッピングされています。セクター番号が始まる位置。
マッピング テーブルが決定された後、論理デバイスの作成と削除の操作は、次の dmsetup コマンドを通じて比較的簡単に完了できます。
dmsetup create 设备名 映射表文件 /* 根据指定的映射表创建一个逻辑设备 */ dmsetup reload 设备名 映射表文件 /* 为指定设备从磁盘中读取映射文件,重新构建映射关系 */ dmsetup remove 设备名 /* 删除指定的逻辑设备 */
ユーザー空間がマッピング テーブルに基づいて論理デバイスを作成するコマンドを発行すると、カーネル内のデバイス マッパーは次のコマンドを使用します。受信パラメータとマッピング関係 論理アドレスから物理アドレスへのマッピング関係を確立します。マッピングテーブル例 1 のマッピング関係に基づいて確立されたデバイスを図 4 に示します。図の下部は、マッピングテーブルに従ってカーネル内に確立された論理アドレスと物理アドレスのマッピング関係を抽象的に示しています。
上記は、Linux システム カーネルのデバイス マッパー メカニズム (1) (4) の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。