Red Hat Training
A Red Hat training course is available for RHEL 8
第10章 NFS でのキャッシュの使用
明示的に指示されない限り、NFS はキャッシュを使用しません。ここでは、FS-Cache を使用して NFS マウントを設定する方法を説明します。
前提条件
cachefilesd パッケージがインストールされ、実行している。これを実行していることを確認するには、次のコマンドを使用します。
# systemctl start cachefilesd # systemctl status cachefilesd
ステータスは active (running) である必要があります。
以下のオプションで NFS 共有をマウントします。
# mount nfs-share:/ /mount/point -o fsc
ファイルがダイレクト I/O や書き込みのために開いていない限り、
/mount/point
の下にあるファイルへのアクセスはすべてキャッシュを経由します。詳細は、NFS でのキャッシュの制限 を参照してください。
NFS インデックスは NFS ファイルハンドルを使用してコンテンツをキャッシュします。ファイル名ではなく、ハードリンクされたファイルはキャッシュを正しく共有します。
NFS バージョン 3、4.0、4.1、および 4.2 はキャッシュに対応します。ただし、各バージョンはキャッシュに異なるブランチを使用します。
10.1. NFS キャッシュ共有の設定
NFS キャッシュの共有には潜在的な問題がいくつかあります。キャッシュは永続的であるため、キャッシュ内のデータブロックは 4 つのキーのシーケンスでインデックス化されます。
- レベル 1: サーバーの詳細
- レベル 2: 一部のマウントオプション、セキュリティータイプ、FSID、識別子
- レベル 3: ファイルハンドル
- レベル 4: ファイル内のページ番号
スーパーブロック間の整合性の管理に関する問題を回避するには、データのキャッシュを必要とする NFS のすべてのスーパーブロックに、固有のレベル 2 キーを設定します。通常、同じソースボリュームとオプションを持つ 2 つの NFS マウントはスーパーブロックを共有しているため、そのボリューム内に異なるディレクトリーをマウントする場合でもキャッシュを共有することになります。
以下は、異なるオプションでキャッシュ共有を設定する方法の例になります。
手順
次のコマンドで NFS 共有をマウントします。
mount home0:/disk0/fred /home/fred -o fsc mount home0:/disk0/jim /home/jim -o fsc
/home/fred
および/home/jim
には同じオプションがあるため、スーパーブロックを共有する可能性が高くなります。特に NFS サーバー上の同じボリュームやパーティションから作成されている場合は共有する可能性が高くなります (home0
)。スーパーブロックを共有しないようにするには、
mount
コマンドに以下のオプションを付けて実行します。mount home0:/disk0/fred /home/fred -o fsc,rsize=8192 mount home0:/disk0/jim /home/jim -o fsc,rsize=65536
この場合、
/home/fred
と/home/jim
は、レベル 2 キーの異なるネットワークアクセスパラメーターを持つため、スーパーブロックを共有しません。2 つのサブツリー (
/home/fred1
と/home/fred2
) のコンテンツを 2 回 キャッシュしてスーパーブロックを共有しないようにするには、次のコマンドを使用します。mount home0:/disk0/fred /home/fred1 -o fsc,rsize=8192 mount home0:/disk0/fred /home/fred2 -o fsc,rsize=65536
スーパーブロックの共有を回避するもう 1 つの方法は、
nosharecache
パラメーターで明示的に共有を回避することです。同じ例を使用します。mount home0:/disk0/fred /home/fred -o nosharecache,fsc mount home0:/disk0/jim /home/jim -o nosharecache,fsc
ただし、この場合は、レベル 2 キーの
home0:/disk0/fred
およびhome0:/disk0/jim
を区別することができないため、使用できるスーパーブロックは 1 つだけとなります。スーパーブロックにアドレスを指定するには、少なくとも 1 つのマウントに unique identifier に追加します。つまり、
fsc=unique-identifier
となります。mount home0:/disk0/fred /home/fred -o nosharecache,fsc mount home0:/disk0/jim /home/jim -o nosharecache,fsc=jim
/home/jim
のキャッシュで使用されるレベル 2 キーに固有識別子のjim
が追加されます。
ユーザーは、異なる通信またはプロトコルパラメーターを持つスーパーブロック間でキャッシュを共有することはできません。たとえば、NFSv4.0 と NFSv3 の間、NFSv4.1 と NFSv4.2 間で共有することはできません。これは、強制されるスーパーブロックが異なるためです。また、読み込みサイズ (rsize) などのパラメーターを設定すると、キャッシュの共有が回避されます。これは、別のスーパーブロックを強制するためです。