異なるパーティション間のパーティションのサイズを変更する方法(CLI)は何ですか?

異なるパーティション間のパーティションのサイズを変更する方法(CLI)は何ですか?

前後に異なるパーティションがあるディスク上の特定のパーティションのサイズを変更するには?

パーティションのサイズを変更する方法(使用など)に関する多数のガイドがインターネットで見つかりましたが、partedすべて単一のパーティションを持つディスクのみを表示します。複数のパーティションでこれを行うにはどうすればよいですか?

私の具体的なユースケースは、WUIを介して魔法のようにサイズ変更できるクラウドベースのネットワークディスクです。この質問の目的のために、この複雑さを捨て、クラウドプロバイダに不可論的な答えを提供します。次のコマンドを使用して簡単な例を設定します。

# create 100 MB "disk" file
head -c 104857600 < /dev/urandom > my_disk
cryptsetup luksFormat my_disk
cryptsetup luksOpen my_disk my_disk

# parition disk with 8M, 4M, 1M, 32M, & 36M partitions
echo "label: dos
label-id: 0x34a96950
device: /dev/mapper/my_disk
unit: sectors
sector-size: 512

/dev/mapper/my_disk-part1 : start=        2048, size=       16384, type=83
/dev/mapper/my_disk-part2 : start=       18432, size=        8192, type=83
/dev/mapper/my_disk-part3 : start=       26624, size=        2048, type=83
/dev/mapper/my_disk-part4 : start=       28672, size=      143360, type=5
/dev/mapper/my_disk-part5 : start=       30720, size=       65536, type=83
/dev/mapper/my_disk-part6 : start=       98304, size=       73728, type=83
" | sfdisk /dev/mapper/my_disk
partprobe /dev/mapper/my_disk

# create ext4 filesystems 
mkfs.ext4 /dev/mapper/my_disk1
mkfs.ext4 /dev/mapper/my_disk2
mkfs.ext4 /dev/mapper/my_disk3
mkfs.ext4 /dev/mapper/my_disk5
mkfs.ext4 /dev/mapper/my_disk6

上記のコマンドは、LUKSで暗号化され、ext4サイズの5つのファイルシステムに分割された100 MBの「ディスク」ファイルを生成します。

  1. 8MB
  2. 4MB
  3. 1MB
  4. 32MB
  5. 36MB

それでは、ディスクサイズを倍増してみましょう。

head -c 104857600 < /dev/urandom >> my_disk

これでディスクサイズが2倍になったので、次のようにディスクパーティションのサイズを変更したいと思います。

  1. 8MB -> 10MB
  2. 4MB -> 5MB
  3. 1MB - > 16MB
  4. 32MB -> 29MB
  5. 36MB -> (残りスペースが利用可能)

2番目のパーティションに10MBの空き容量があると仮定すると、データを失うことなくこれらのファイルシステム(&&LUKSコンテナ&&パーティション)のサイズをどのように調整できますか?パーティションテーブルを削除し、開始/終了値を手動で入力しなくても簡単にこれを実行できるCLIツールはありますか?理想的には、+2M入力だけでパーティションサイズを2MBまで増やすことができることを願っています。

答え1

(個人的には、EFIシステムパーティションを除いて、最近1GBより小さい複数のパーティションを作成することが「不要な微細管理」だと思います/boot。しかし理由があると確信しています。)

あなたが以来ダブル既存のディスクサイズを使用すると、LVMに切り替える良い機会になります。

まず、LVM ツールが使用可能であることを確認します。これがルートファイルシステムの場合は、ツールを含めるためにinitramfsを再構築する必要があるかもしれません。

暗号化されたボリュームを拡張した後:

head -c 104857600 < /dev/urandom >> my_disk
cryptsetup resize my_disk

追加されたすべてのスペースを占めるために、必要なパーティションツールを使用して新しいパーティションを作成できます。として読む必要があります/dev/mapper/my_disk-part7。タイプを8e(Linux LVM)に設定します。

LVMで使用できるように初期化します。

pvcreate /dev/mapper/my_disk-part7

新しいLVMボリュームグループ(減らしてVG)を作成します。

vgcreate my_vg /dev/mapper/my_disk-part7

次に、既存のパーティションと一致するLVM論理ボリューム(LV)を作成します。

lvcreate -L 8M -n my_lv1 my_vg 
lvcreate -L 4M -n my_lv2 my_vg 
lvcreate -L 1M -n my_lv3 my_vg 
lvcreate -L 32M -n my_lv5 my_vg 
lvcreate -l 100%FREE -n my_lv6 my_vg 

-L注:メガ/ギガ/テラバイトのサイズを指定する場合は大文字を使用し、-l使用可能容量または総容量の割合を指定する場合は小文字を使用してください。

ファイルシステムの作成:

for i in 1 2 3 5 6; do mkfs.ext4 /dev/mapper/my_vg-my_lv$i; done

このコマンドを使用すると、vgs論理ボリュームに割り当てられたVGスペース全体のサイズを表示し、lvs個々の論理ボリュームのサイズを表示できます。

一部のアプリケーションのダウンタイムをスケジュールし、既存のディスクのすべてのエントリを新しいディスクにコピーします。

mkdir /old /new
mount /dev/mapper/my_disk-part1 /old
mount /dev/mapper/my_vg-my_lv1 /new
cp -a /old/* /new/
umount /new
umount /old

...5つのパーティションすべてに対してこの操作を繰り返します。

これで/etc/fstab、以前のパーティションではなくLVM論理ボリュームを参照するようにエントリを変更できます。ここにルートファイルシステムが含まれている場合は、編集することを忘れないでください。新しい古いファイルシステムではなく、ルートファイルシステムです。また、古いルートファイルシステムまたは新しいルートファイルシステムから起動することを明示的に選択できるように、追加の起動オプションを作成して、すべてが必要な場所にインストールされていることを確認することもできます。慎重にテストし、特にルートファイルシステムが含まれている場合。

LVMを正常に使用したら、以前の設定をオフにします。古いパーティション#1、#2、#3を削除し、その場所に1つのパーティションのみを作成します(オーバーヘッドを最小限に抑えるため)。また、タイプを8e(Linux LVM)に設定します。これは新しいものです/dev/mapper/my_disk-part1。パーティション#5と#6のタイプを8e(Linux LVM)に変更します。

パーティショニングが完了したら、システムの正常な使用を再開できます。

これで、LVMで使用できるように解放されたパーティションを初期化します。

pvcreate /dev/mapper/my_disk-part1
pvcreate /dev/mapper/my_disk-part5
pvcreate /dev/mapper/my_disk-part6

既存のボリュームグループに追加します。

vgextend my_vg /dev/mapper/my_disk-part1
vgextend my_vg /dev/mapper/my_disk-part5
vgextend my_vg /dev/mapper/my_disk-part6

vgsこの時点で実行してみると、今my_vgサイズが200M程度になり、100Mほど残ったことがわかります。実際に現在利用可能なスペースは物理既存LVの「左」側それは問題ではありません:拡張して使用できます。どのあなたが適していると思うLV。できます。すべてがインストールされ使用される場合

これで、元々やりたかったことを行うことができます。

lvextend -r -L 10M /dev/mapper/my_vg-my_lv1
lvextend -r -L +1MB /dev/mapper/my_vg-my_lv2
lvextend -r -L +15M /dev/mapper/my_vg-my_lv3

ext4残念ながら、マウントされたファイルシステムの縮小はサポートされていません。

umount /dev/mapper/my_vg-my_lv5
lvreduce -r -L 29M /dev/mapper/my_vg-my_lv5
mount /dev/mapper/my_vg-my_lv5

最後に割り当てられていない残りの容量はすべて最後のLVに割り当てられます。

lvextend -r -l +100%FREE /dev/mapper/my_vg-my_lv6

未来のために:

ディスクファイルのサイズを再度増やす必要がある場合は、すべてをインストールして実行中に起動せずに実行できます。

head -c 104857600 < /dev/urandom >> my_disk   # extend disk image
cryptsetup resize my_disk                     # tell the encryption layer to use it
growpart /dev/mapper/my_disk 7                # extend partition
pvresize /dev/mapper/my_disk-part7            # tell the LVM PV to use it

...これにより、LVに割り当てることができる100 MBのスペースがありlvextendますlvcreate

新しいディスクに移行する必要がある場合は、すべてをインストールした状態で実行できることをお知らせください。

vgextend my_vg /dev/mapper/my_new_disk       # add new disk to the VG
pvmove /dev/mapper/my_disk                   # migrate everything away from the old PV
vgreduce my_vg /dev/mapper/my_disk

次に、既存のディスクを削除します。

職場では、基本的にデータセンター全体を新しいストレージに移行しました。 5年ごとに何度も行いました。既存のエンタープライズストレージハードウェアのサポートが終了するか、新しいハードウェアに切り替えるよりも高速になるため、コストがかかります。 。

関連情報