私はしばらく前にソフトウェアの並列性について学びました。https://forums.servethehome.com/index.php?threads/mdadm-create-raid-0-quick-format.41161/#post-389210
今私の目標は以前とほぼ同じですが、別の方法でやりたいです。
私が持っている設定は次のとおりです。
シングルポートSAS2 HBAを搭載したDell SFFデスクトップ
合計14個のNetApp SAS3ディスクシェルフ
Disk Shelfあたり24個の960GB 12G SAS SSDのインストール
ドライブは520セクタサイズを実行します。
目的は、すべてのドライブでsg_format --format -e /dev/sgXXをできるだけ並行して実行することです。
1つずつ実行できますが、並列性を使用してその機能を理解し、すべての同様の将来のプロジェクトでこれをすばやく実行したいと思います。
私はUbuntu 23.10を使用しており、Universeリポジトリを追加し、apt updateとapt installを並列に使用しました。 Parallel は sg3-utils と smartmontools とともにインストールされます。
私のHBAは128個のデバイスを処理できます。ここで、デバイス1(または0)はHBA自体であるため、チェーン内で合計5つのDisk Shelfが実行されます。つまり、120個のドライブが接続されているという意味です。 /dev/sg2で始まり、/dev/sg126で終わります。
私が使用するコマンドは次のとおりです。parallel sg_format --format -e ::: /dev/sg[2-126]
実行すると端末が数秒間停止します。これは予想される現象です。
ただし、実際には/dev/sg2と/dev/sg6のみが実行されています。下の画像をご覧ください。
すべてのドライブは同じですが、そのうちの2つだけが実際にフォーマットを開始しようとしています。エラーや起動しない理由はありません。
ドライブを「手動」で起動しようとしたため、sg_formatコマンドのみを使用すると、すべてのドライブが正しく起動しました。
コマンドを実行すると
並列 sg_format --format -e ::: /dev/sg[2-10]
/dev/sg2 で sg_format を実行し、次に /dev/sg0 でこの 2 つを実行します。
もちろん、複数のデバイスに入力する際に問題があります。
知っている人はいますか?
答え1
これは/dev/sg[2-126]
範囲を使用しているためです。残念ながら、範囲は複数の桁を処理できません。彼ら特徴範囲で、126
文字ではありません。したがって、持つことはできますが、「0から1までの文字、その後には0の文字」を意味するので[0-9]
持つことはできません。[0-10]
したがって、あなたは実際に「2と1の間の数字」を意味します。これは、2が1の後にあり、特定の数値sumである[2-126]
ため意味がありません。そのため、合計のみ一致させます。2
6
sg2
sg6
したがって、最初のコマンドはおよびで実行されparallel sg_format --format -e ::: /dev/sg[2-126]
ます。 2番目のコマンドは で実行され、 と との間に他の文字がないため、単一文字として解釈され、それ自体で処理されます。sg2
sg6
parallel sg_format --format -e ::: /dev/sg[2-10]
/dev/sg2
/dev/sg0
[2-1]
2
2
1
0
あなたが望むものは使用することです支柱の拡張代わりに:
parallel sg_format --format -e ::: /dev/sg{2..126}
または、一度にできるだけ多くのタスクを実行するには、次を使用します。
parallel -j0 sg_format --format -e ::: /dev/sg{2..126}