エッセンス
データを失うことなく、パーティションとファイルシステム(xfs、ext3,4)を簡単に拡張するプログラムを開発しました。
github.com/rekby/fsextender/releases/latest元の問題
Linuxファミリで仮想マシンのディスクを展開した後、その中のデータセクションを展開します。
ファイルシステムは、パーティションテーブルなしでディスク全体を占有します
最も単純なケース(パーティションなしのディスク全体に1つのファイルシステム)では、xfs_growfsまたはresize2fsを呼び出すだけで十分です。
LVMボリューム上のファイルシステム
ファイルシステムがLVMの上で実行される場合、拡張機能は少し複雑ですが、それでも安全です。新しいパーティションを追加し、そこに物理LVMボリュームを作成し、それをLVMグループに追加し、論理ボリュームを拡張してからファイルシステムを拡張します。 ここでの副作用は、場所が数回徐々に追加される場合のパーティションと物理ボリュームのヒープになります。 少しずつ。 また、msdos-partitionテーブルを使用する場合、拡張パーティションの使用について覚えておく必要があります。そうしないと、拡張パーティションの数が4個に制限され、シャーマンとパーティションテーブルの書き換えが必要になります。
通常のパーティション内のファイルシステム
手動で実行するための最も危険なオプション:パーティションを手動で削除して再作成し、前のパーティションと同じ場所で開始し、ディスクの最後の空きセクターで終了するようにする必要があります。
これには注意と精度を高める必要があります-数字に誤りがあると、すべてのデータを簡単に失う可能性があります。 さらに、副作用として、GPTパーティションのGUIDが変更されており、システム設定に何らかのバインドが存在する可能性があります。
解決方法
すべての場合において、可能であれば、パーティションテーブルを書き換えることにしました。 自動モードでは、これは手動ほど危険ではありません(msdosテーブルではテーブル全体が1つのセクターに収まり、セクターレコードはアトミックであり、GPTテーブルには最初のテーブルが破損した場合のチェックサムとバックアップコピーがあります)。
実装言語はゴー 出力は、外部依存関係なしで静的バイナリを取得するのが非常に簡単です。これは重要です。 テンプレートが更新されると、centos 5.4 x86から最新のubuntu 14.04 x64まで、OSの異なるバージョンで同じバイナリを実行する必要があります。
まとめ
パーティションテーブルを直接操作するための2つのライブラリが作成されました:
github.com/rekby/mbr-msdosパーティションテーブルを
操作するため(外部インターフェイスはあまり良くありませんが、適切に動作します)、
github.com /
rekby /
gpt -GPTテーブルを操作するため。
パーティションとファイルシステムの拡張が書かれています。 彼ができること:
1.データ、フラグ、識別子などを失うことなく、msdosテーブルのメイン(プライマリ、非論理)セクションとGPTセクションを適切に展開します。 (カーネルがサポートしている場合、再起動せずに-たとえばubuntu 14.04のように)。
2. LVM-PVの下のパーティションを拡張できる場合は、データを損失することなく、LVM物理ボリューム(LVM-PV)を拡張します。
2. LVM拡張用の新しいパーティションを作成します(誤解を避けるため、パーティションは、準備済みのパーティションテーブルが既に存在するディスク上にのみ作成されます)。
3.ディスクをフィルター処理して新しいパーティションを作成します(デフォルトでは、新しいパーティションはこのLVMグループが既に配置されているディスクにのみ作成され、フィルターを無効にできます)。
4.ファイルシステムext3、ext4、xfsを拡張します。
5.マシンは、パーティションテーブルを上書きした後、再起動が必要かどうかを判断します。
パーティションテーブルは、ディスクのサービスエリアのデータによって直接上書きされます。 これは、partedなどのツールを使用するよりも安全です。 パーティションテーブルの整合性違反時間は短くなり、場合によっては完全になくなります。
LVMでの作業とファイルシステムの拡張は、対応するコマンド(pvcreate、xfs_growfsなど)への外部呼び出しによって行われるため、これらのコマンドはインストールされ、PATHに存在する必要があります。 名前だけで呼び出すことができます。 ほとんどの場合、この条件は自然に満たされます。
その結果、ファイルシステムの拡張子とその下にあるパーティションは次のようになります。
fsextender /home --do
または:
fsextender /dev/sda2 --do
または:
fsextender /dev/lvm-group/lvm-volume --do