ネットワークインストールソフトウェアの仕組みを知りたいです。たとえば、私の仕事にはソフトウェアサーバーがあります。各クライアントコンピュータ(数百台)は、起動時にソフトウェアサーバーからディレクトリを自動的にマウントします。たとえば、Matlab などのプログラムはソフトウェア サーバーに一度だけインストールされますが、各クライアント コンピュータは Matlab インスタンスを起動できます。
後ろから何が起こっているのでしょうか?
ソフトウェアサーバーで実行して/opt/bin/matlab
インストールしたとし、クライアントコンピュータ/opt/
でMatlabを実行するためにEnterキーを押すとどうなりますか?プロセスはクライアントコンピュータ上にあり、ディスク領域がほとんどないコンピュータでMatlabを実行して、暗黙的または隠しファイル転送がないことを確認して、範囲を狭めました(たとえば、そのセッションに対してMatlabを一時的に削除します)。私のコンピュータに)(つまり、転送するスペースが不足しています)。
- Matlabはサーバーにインストールされていますが、私のクライアントコンピュータでどのように実行できますか?
- これを制御するメカニズムは何ですか?
- 後ろで何が起こるのか?
答え1
これを達成するために彼らが使用したスキルは次のとおりです。NFS - ネットワークファイルシステム。また、NFSで自動マウントする別の技術を使用することもできます。オートパースLinuxなら。
ネットワークファイルシステム
NFSを使用すると、別のコンピュータがあるコンピュータのフォルダにアクセスできます。これに対して魔法のようなものはありません。この接続を促進するクライアントとサーバーがあります。 NFSクライアントを介してシステムにマウントされているこれらのディレクトリの1つにアクセスすると、システムはディレクトリとその内容に関する情報を中継するために呼び出します。
クライアントの1つがディレクトリ内のファイルにアクセスすると、NFSサーバーはファイルの内容をNFSクライアントに中継します。
オートパース
自動マウントは、クライアントシステムが共有リモートリソース(NFSなど)に一時的にアクセスできるようにする技術です。これは、NFSクライアントシステムがこのリモートNFS共有にアクセスできることを意味します。ただし、誰かが共有ディレクトリにアクセスしようとするまで、これを積極的に「使用」しません。その後、NFSクライアントはリモートディレクトリとその内容を「マウント」しようとします。
ファイルコンテンツのライフサイクル
どちらの場合も、ファイルは暗黙的にNFSクライアントに転送されません。つまり、長期的にはクライアントに物理的にコピーされません。これらのファイルは、クライアントがアクセスしようとするとクライアントにストリーミングされます。使用後は消え、長期的な形でお客様にしがみつきません。
おおよそのアイデアを提供するために、このプログラムを使用して、strace
プログラムの実行中に行われたいくつかのシステムコールを表示できます。たとえば、次のコマンドを使用します。
$ strace echo "hello world" > afile
ファイルがシステムに記録される方法を確認できます。次の形式を使用してNFSマウントディレクトリに書き込むこともできます。
$ strace echo "hello world" > /home/sam/afile
両方のトレースはほぼ同じです。
###地域を書く
$ cat strace_wr_local.log
execve("/bin/echo", ["echo", "hello world"], [/* 33 vars */]) = 0
...
fstat64(1, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f80000
write(1, "hello world\n", 12) = 12
close(1) = 0
### NFS書き込み
$ cat strace_wr_remote.log
execve("/bin/echo", ["echo", "hello world"], [/* 33 vars */]) = 0
...
fstat64(1, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fbe000
write(1, "hello world\n", 12) = 12
close(1) = 0
読み方は少し面白いですが、基本的には同じです。
###ローカル読み取り
$ cat strace_rd_local.log
execve("/bin/cat", ["cat", "afile"], [/* 33 vars */]) = 0
...
fstat64(1, {st_mode=S_IFREG|0644, st_size=1761, ...}) = 0
open("afile", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=12, ...}) = 0
read(3, "hello world\n", 4096) = 12
write(1, "hello world\n", 12hello world
) = 12
read(3, "", 4096) = 0
close(3) = 0
### NFSを読む
$ cat strace_rd_remote.log
execve("/bin/cat", ["cat", "/home/sam/afile"], [/* 33 vars */]) = 0
...
fstat64(1, {st_mode=S_IFREG|0644, st_size=1771, ...}) = 0
open("/home/sam/afile", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=12, ...}) = 0
read(3, "hello world\n", 4096) = 12
write(1, "hello world\n", 12hello world
) = 12
read(3, "", 4096) = 0
close(3) = 0
プールに入る
NFSプロトコルについて質問がある場合は、ここでNFSプロトコルがどのように機能するかについて詳しく学んでください。NFSプロトコルの基本。一般的に、これがどのように機能するかについての基本的な概念を理解するのは簡単です。仕組みのアイデアを提供するためのNFS要求の例があります。
深い研究
実際にカーテンの後ろを見たい場合は、NFSサーバーとクライアントの間を行き来するビットストリームを見るためにネットワークトラフィックを収集するツールセットを導入することをお勧めします。これらのツールは、より深い研究のための友達になったり、友達になったりすることができtcpdump
ます。wireshark
本当に好奇心が多いタイプでなければ、時間を無駄にしないようにご注意を申し上げたいと思います。このような深い研究には、一連のUnixツールの多くのスキルと使い慣れが必要だからです。 12年以上UNIX。
本当に気になるなら、このサイトが役に立ちます。
答え2
LinuxTerminalServerProject "LTSP"とDisklessRemoteBootLinux "DRBL"は、多くの学校や企業がディスクレスクライアントをPXEブートするために使用する無料のオープンソースプロジェクトです。人件費と製品コスト管理を簡素化します。すべてがRAMで実行されるため、システムははるかに高速です。幸いなことに、遅いIntel SATAチップセットを手に入れることができれば、NFSサーバー用のDRBLクライアントにアクセスするのはそれほど価値があることが証明されます。正確な数値はわかりませんが、DRBL PXEブートディスクを持たないクライアントがローカルブートSolidStateDriveを上回ると確信しています。 NFSはSMBより高速です。