大容量ファイル転送スキーム(scpおよびファイルカット)

                                                  大容量ファイル転送スキーム(scpおよびファイルカット)

まず、どの種類のファイルが大きなファイルと見なされるかを明確にする必要があります。通常、大きなファイルの標準として4G容量が使用されます。その理由は、Uディスクにfat32形式のパーティションが多数あるためです。fat32形式のUディスクは、4G未満のファイルのみをサポートします。多くの学生がUSBブートディスクを作成するときにwin7やwin10などのブートディスクを正常に作成できなかったと思います。その理由は、システムインストールISOファイルが4Gより大きく、USBディスクがfat32形式のパーティションであるためです。 、そのため、ISOファイルを書き込むことができません。USBフラッシュドライブが原因です。

次に、ファイル転送の成功に影響を与え、決定する3つの要因があります。1つはメモリ、もう1つはネットワーク帯域幅であり、ネットワーク速度としても理解できます。3つ目はCPUパフォーマンスであり、一般にポイント形式です。 -ポイントツーポイントファイル転送。

上記は単なる大きな概念であり、具体的な実際の操作はより複雑なプロセスです。通常、ネットワーク間のファイル転送とオペレーティングシステム内の異なるディスク間のファイル転送に分けられます。

ネットワーク間のファイル転送

ネットワーク内のファイル転送は、ファイルの読み取り、コピーなどにupdまたはtcpネットワークプロトコルを使用します。

たとえば、最も直接的な方法:ネットワーク要求からディスク上のファイルのパスを見つけた後、ファイルが比較的大きい場合(320MBと想定)、メモリに32KBのバッファを割り当ててから、ファイルを10,000に分割できます。コピー。コピーはわずか32KBです。このようにして、32KBがファイルの先頭からバッファーに読み取られ、32KBがネットワークAPIを介してクライアントに送信されます。次に、完全なファイルが送信されるまで、それを1万回繰り返します。

次に、このプロセスで発生する詳細な操作は次のとおりです。

コンテキストスイッチ:
最初に、ユーザーモードとカーネルモードの間で少なくとも40,000のコンテキストスイッチが発生しました。32KBのメッセージごとに処理されるため、読み取り呼び出しと書き込み呼び出しが必要です。各システムコールは、最初にユーザーモードからカーネルモードに切り替え、カーネルがタスクを完了した後、カーネルモードからユーザーモードに切り替える必要があります。処理された32KBごとに4つのコンテキストスイッチがあり、10,000回の繰り返しの後、40,000のスイッチがあることがわかります。
コンテキストスイッチングのコストは小さくありません。スイッチは数十ナノ秒から数マイクロ秒しか消費しませんが、同時実行性の高いサービスはこのタイプの時間消費を増幅します。(CPUパフォーマンスがボトルネックになる可能性があります)

メモリコピー:
次に、このプログラムは40,000のメモリコピーを作成し、320MBのファイルからコピーされたバイト数も4倍の1280MBになりました。明らかに、メモリコピーが多すぎると、CPUリソースが無駄に消費され、システムの同時処理機能が低下します。(メモリのサイズがボトルネックになる可能性があります)

ネットワーク間のファイル転送は、両端のサーバーのメモリとCPUのテストであり、両端のネットワークカードのテストでもあるという結論を導き出すことができます。(興味がある場合は、ネットワーク送信中にネットワークカードのライトを観察してみてください。狂ったようにちらつきます。)

 

オペレーティングシステム内の異なるディスクまたはパーティション間のファイル転送

ここでの異なるディスクは通常、WindowsなどのオペレーティングシステムとUディスクなどの別の独立したファイルシステムを指します。ここでのファイル転送とネットワークファイル転送の違いは、ネットワーク転送プロトコルが使用されておらず、完全にシステムカーネルのものであるということです。ファイルスケジューリング。プロトコルの制限がないため、ネットワーク帯域幅は決定的な考慮事項ではなく、CPUとメモリのパフォーマンスです。

1.コピーの原則は、ファイルのコピーをメモリ内のバッファにコピーすることです。これをクリップボードと呼びます。バッファ容量には限りがあり、大きなファイルはバッチでコピーされますが、気付かないでしょう。同時に、バッファ内のデータは継続的にターゲットの場所に書き込まれます。ファイルのコピーが完了しました。切り取りは、コピーが完了した後にソースファイルを削除する、つまり、ファイルアロケーションテーブルで削除するソースファイルにマークを付けるという、それよりも1つ多くの手順です。
2.ファイル数によって異なります。一般に、切り取りはコピーよりも少し遅くなります。つまり、ソースファイルを削除する時間は遅くなります。もちろん、ソースファイルが多いほど、切り取りはコピーよりも遅くなります。これは通常の削除であり、削除速度はファイルサイズとは関係なく、ファイルの数だけです。
上記はクロスパーティションです。以下は
同じパーティションの説明です。4。同じパーティションにあるため、カットはファイルアロケーションテーブルの内容を直接変更し、データを別のファイル名にリンクすることで、非常に高速です。同じパーティションレプリケーションは、クロスパーティションレプリケーションのようにそれほど高速ではありません。

上記は実際にファイルストリームの概念について述べたものですが、プログラミングの経験があれば非常に理解しやすいと思います。つまり、ファイルストリーミングとメモリキャッシュの2つの概念があります。したがって、winmeのような古いシステムを使用すると、ブルースクリーンの痛みが発生します。その理由は、以前のオペレーティングシステムがファイル全体をメモリキャッシュに読み込み、自動的にインテリジェントにカットしないため、多くの場合、オペレーティングシステムメモリバースト。幸いなことに、社会は改善されており、オペレーティングシステムも絶えず改善されています。

実際、ファイル転送の種類に関係なく、分割統治法です。つまり、ファイルはソースファイル側で適切なサイズに分割され、ターゲット側で完全なファイルが再構築されます

もう1つ、ファイル転送プロセスは非常に複雑なプロセスであり、CPU、CPUの1番目と2番目のキャッシュ、メモリ、メモリバッファ、ファイルシステム(xfs、ext3、ext4、fat、fat32、ntfsを参照、さまざまな特性の違いhdfsなどのファイルシステム、ネットワークカードのスループット、スイッチのパフォーマンス、およびその他の要因は密接に関連しています。主張する場合は、本を書く必要があるかもしれません。それが伝達である限り、分割統治の考えは不可分であることを覚えておいてください。




上記はいくつかのより抽象的な概念的なものです、いくつかの実用的なものを手に入れましょう。最初の質問は、効率的で高速かつ安全なファイル転送を実現する方法です。

いくつかの解決策があります。最初に、小さなファイルがファイル全体、つまりパッケージ化されたファイルにマージされます。これは、パッケージ化中に適切に圧縮されます。次に、tcpプロトコルがネットワーク送信に使用されます。第3に、大きなファイルを小さなファイルに分割します。つまり、小さなファイルに分割し、ディスク容量を減らし、ネットワーク帯域幅を効果的に使用します。簡単に言えば、それは圧縮と切断です。

圧縮ツールの選択に関して、Windowsは一般的にwinRARを使用します。Linuxでは、一般的に使用されるtar、bzip2、gzipなど、多くの選択肢があります。推奨される圧縮ツールと、超高圧縮率のソフトウェアを次に示します。詳細については、を参照してください。ブログ:https://blog.csdn.net/alwaysbefine/article/details/110424989

。:大きなファイルを切断の選択については、Windowsは、アーティファクトhjsplitソフトウェアを使用して、LinuxでのRARのダウンロードリンクがあるお勧めしますhttps://pan.baidu.com/s/1kIj9diSEorAr0pT70434ag  、抽出コード:RARA、hjsplitおよびLinux RARなどのを。

Linuxで大きなファイルを切り取るために一般的に使用されるソフトウェアは分割されています。これはシステムに付属している非常にユーザーフレンドリーなソフトウェアです。




ソースエンドでファイルをカットしてターゲットエンドに送信した後、もちろんそれらをマージする必要があります。いくつかの例を次に示します。

Windowsソース---- "Linuxターゲットhjsplitを使用してWindows側で切断した後、Linuxはcatコマンドを使用してファイルをリダイレクトおよびマージします

このファイルは14kですが、2kサイズでカットすると7ファイルにカットされます

切り取った後、それをLinuxサーバー(cat Oracle *> oracle.sql)にアップロードすると、ファイル全体が戻ってきたことがわかります。

Linuxシステムでのファイルの切断:

Linuxサーバーにファイルがあります。内容はmailxのヘルプファイルです。ファイルサイズは140kですが、50kの3つのファイルに分割する予定ですか?カットする方法は?

[root@centos7 ~]# split -b 50k -d --verbose mail.man mail.txt
creating file ‘mail.txt00’
creating file ‘mail.txt01’
creating file ‘mail.txt02’

上記のコマンドは、ファイルサイズに応じて切り取る-b、各ファイルは50k、-dは切り取るファイルを番号単位で指定し、-verboseは詳細なプロセス、切り取るファイル、およびその後のファイル名を表示します。切断。

[root@centos7 ~]# ll
total 296
-rw-------. 1 root root   1587 Jan 23 22:17 anaconda-ks.cfg
-rw-------  1 root root    631 Feb 16 09:27 dead.letter
-rw-r--r--  1 root root   1635 Jan 23 23:05 initial-setup-ks.cfg
-rw-r--r--  1 root root 143091 Feb 16 10:22 mail.man
-rw-r--r--  1 root root  51200 Feb 21 00:37 mail.txt00
-rw-r--r--  1 root root  51200 Feb 21 00:37 mail.txt01
-rw-r--r--  1 root root  40691 Feb 21 00:37 mail.txt02

ファイル00と01のサイズは50kであり、元のファイルの不十分な部分がファイル02に割り当てられていることがわかります。では、元のファイルmail.manが削除されたので、マージについてはどうでしょうか。(元のファイルは2199行です。削除した後、以前に切り取ったファイルをマージして、まだ2199行かどうかを確認します???)

[root@centos7 ~]# cat mail.man |wc -l
2199
[root@centos7 ~]# cat mail.txt0* > mail.bak
[root@centos7 ~]# cat mail.bak |wc -l
2199

マージ後、mail.bakという名前になり、内容と行数は元のファイルと一致します。

Linuxはとても強力です!




ソースファイルまたはソースフォルダが配置されているオペレーティングシステムがLinuxであり、ターゲットオペレーティングシステムもLinuxである場合、便利で迅速なscpコマンドを起動できます。ターゲットオペレーティングシステムのIPアドレスとssh接続用に開いているポート番号それだけです(通常、デフォルトです。デフォルトのポート番号でない場合は、ターゲットオペレーティングシステムのポートを指定するだけです)。

デフォルトのポートの場合は、-Pパラメーターを省略し、ポート番号を指定して追加します。ソースがフォルダーの場合、-rパラメーターはファイルを再帰的に転送します。

例:マシンaの/ etcディレクトリをリモートマシンbの/ mntディレクトリにコピーすると、コマンドはマシンaで実行されます。

マシンb:/ mnt /のscp-r / etc / ip、マシンb sshによって開かれたポートが11111の場合、コマンドはマシンaで実行されます。

scp -r -P 11111 / etc / b machine IP:/ mnt /、コマンドの実行後、bマシンであるターゲットマシンのrootパスワードを入力するように求められます(デフォルトでは、次の方法でログインします)。 rootユーザーは、rootユーザーが最も権限があり、権限の問題を引き起こさないため、scpが失敗します。bマシンの通常のユーザーを使用する場合、コマンドは次のとおりです。scp-r -P 11111 / etc /通常のユーザー名@bマシンのIP:/ mnt /)。

おすすめ

転載: blog.csdn.net/alwaysbefine/article/details/113915285