Linux'ta GPT bölümünün canlı yeniden boyutlandırılması


12

Linux'ta, canlı dosya sistemlerinde bile fdisk kullanarak MBR bölümlerini yeniden boyutlandırıyordum ve sonra yeni alanı tahsis etmek için bir resize2fs / pvresize / ... (fs türüne bağlı olarak) veriyordum.

Son zamanlarda Xen ve GPT bölümlerini kullanıyorum ve ne yazık ki ayrıldığının, monte edilmiş bir bölümün anında yeniden boyutlandırılmasına izin vermediğini fark ettim, aslında şikayet edecek:

Error: Partition XXX is being used. You must unmount it before you modify it with Parted.

Hem resizekomutu hem de rm+ mkpartkombinasyonunu denedim , ancak her ikisi de monte edilen bölümden şikayet edecekler.

Bunu nasıl yapabilirim?


RHEL /
CentOS'ta

Yanıtlar:


13

Bunu yapmanın en güvenli yolu, bir acil durum aracı (canlı bir CD veya benzeri) kullanarak önyükleme yapmak ve içerdiği bölümü ve dosya sistemini yeniden boyutlandıracak GParted kullanmaktır. Bu, yalnızca bölüm şu anda kullanılmıyorsa çalışacaktır.

Bununla birlikte, herhangi bir kesinti zamanı göze alamıyorsanız, gdiskbunun yerine kullanmayı deneyebilirsiniz parted. Yeniden boyutlandırmak istediğiniz bölümü silmeniz ve yerine aynı başlangıç ​​noktasıyla yeni bir tane oluşturmanız gerekir fdisk. gdiskçekirdek herhangi bir değişiklik kaydetmeyebilir, ancak kullanımda olan bir disk üzerinde çalışmaya istekli. Bu durumda, çekirdeği kullanmanız partprobeveya kpartxyeni bölüm tablosunu kabul etmesi için çekirdeği almanız, hatta çalışmazsa bilgisayarı yeniden başlatmanız gerekebilir . (Bunların hepsi kullanıma oldukça benzer olmalıdır fdisk.)


Güzel görünüyor, ancak CentOS'ta varsayılan olarak bulunmuyor. Daha standart bir yol var mı? Yani, redhat benzeri bir sistem harici programlara güvenmeden kendini yeniden boyutlandırabilmelidir
cyberz

2
İşi yapacak CentOS ile gelen hiçbir araç yoktur. Sen gerekir CentOS istediğini yapmak depoya dışına gidin. Hemen hemen tüm diğer dağıtımların (Fedora dahil) gdiskdepolarına gdiskdahil olduğunu ve bunun RHEL'in (ve dolayısıyla CentOS'un) sonraki sürümüne dahil edileceğini duydum .
Rod Smith

Cevap ve yorum için teşekkür ederim, tam olarak aradığım bilgiler
cyberz

1
gdiskEPEL'de mevcuttur.
jornane

Ben hem çalıştı partxve partprobeancak sonunda yeniden başlatma gerekiyordu. Bu ipuçları için yine de teşekkürler
Alexandre Bourlier

10

Bu genellikle yalnızca daha yeni Linux dağıtımlarıyla çalışır. Gerekli araçlar:

  • partprobe (genellikle ayrılmış bölüm)
  • gdisk / sgdisk

GPT bölümü, diskin sonunda bir yedekleme başlığı depolar. Temel cihazı yeniden boyutlandırdıysanız, yedekleme başlığı ortada bir yerde olacaktır. İlk adım bölüm başlığını diskin sonuna taşımaktır.

Diskin / dev / sda ve bölümün / dev / sda3 olduğunu varsayarsak (son bölüm de olmalıdır):

sgdisk -e /dev/sda

Ardından, son bölümü silin ve yeniden oluşturun:

sgdisk -d 3 /dev/sda
sgdisk -N 3 /dev/sda

Genellikle çekirdeğin bölüm tablosunu yeniden yükleyemediğini belirten bir mesaj görürsünüz. Partition'ın yeni boyuta kaydedilmesi için partprobe çalıştırmanız gerekir:

partprobe /dev/sda

Bu başarısız olursa, sanal makineyi yeniden başlatmanız gerekir. Bundan sonra ext4 vb. İçin uygun araçla dosya sisteminizi büyütebilirsiniz:

resize2fs /dev/sda3

Dikkat : sgdisk'i çalıştırmak yıkıcı olabilir. Uygun yedekleme prosedürleri uyguladığınızdan emin olun.


Müthiş! Özellikle partprobeadım için teşekkürler - Her zaman monte edilmiş bölümlerle bölme tablosunu değiştirirken yeniden başlatmanın gerekli olduğunu düşündüm.
piit79

Bölümü yok etmenin ve yeniden oluşturmanın bölüm için yeni bir PARTUUID oluşturacağını unutmayın; aksi takdirde fstab / GRUB / etc'nin çoklu disk kurulumlarındaki bölümleri güvenilir bir şekilde tanımlaması için tek güvenilir ve dosya sisteminden bağımsız yöntemdir.
Teo Klestrup Röijezon

5

Otomatik bir aracın bir bölümü çevrimiçi olarak yeniden boyutlandırmak için kullandığı bir örnek:

sgdisk -d 1 -n 1: 2048: 0 -c 1: -u 1: E485F29F-A1F4-4953-9DD8-799EAEA0119B -t 1: 0700 / dev / xvda

Sgdisk komutu için seçenekler listesi:

  • -d 1 delete'nin ilk bölümü
  • -n 1: 2048: 0 , başlangıç ​​sektörü 2048 ile yeni bir "1 numaralı" bölüm oluştur "diyor. End sektör =" 0 "," bu bölüm için kullanılabilir tüm alanı kullan
  • -u bu bölüm için benzersiz bir kılavuz belirler (GPT bölümleri için özeldir); GUID'nin rastgele bir değere ayarlanması için 'R' kullanabilirsiniz. gdisk /dev/xvda; pAynı kullanıcı kimliğini yeniden kullanmak için geçerli bölümlerin kimliğini çıktı yoluyla da alabilirsiniz
  • -t 1: 0700 temel olarak ilk bölümün '0700' tür kodunda olduğu anlamına gelir.

/ dev / xvda, yeniden bölümlendirdiğimiz diskti.

Böylece siler ve hemen yerine yeni bir bölüm oluşturur.

PS. '0700' tip koduyla ilgili birkaç not. Erkek SGDISK (8)

   -t, --typecode=partnum:{hexcode|GUID}
          Change a single partition's type  code.  You  enter  the  type  code  using  either  a  two-byte  hexadecimal  number,  as 

daha önce tarif edilmiş veya EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 gibi tam olarak belirlenmiş bir GUID değeri.

'0700' ifadesinin ne anlama geldiğine ilişkin en iyi açıklamayı burada bulabilirsiniz - http://www.rodsbooks.com/gdisk/walkthrough.html

"Ama bekleyin," diyorsunuz ki, "Diskin bir FAT bölümü olduğunu düşündüm!" Gerçekten de öyle. Windows, FAT veya NTFS olsun, tüm veri bölümleri için tek bir GUID kodu kullanır. Geçmişte, aynı kod Linux'ta veri bölümleri için kullanılmıştır. (Kısaca daha fazla ....) Böylece, bu durumda, birkaç farklı MBR kodu tek bir GPT GUID koduna çevrilir. GPT fdisk, tüm bunlar için biraz keyfi olarak 0x0700 kodunu (veya daha doğrusu EBD0A0A2-B9E5-4433-87C0-68B6B72699C7) kullanır.

Benim durumumda bunun bir Linux ext4 bölümü olduğuna inanıyorum, ancak bölümün tip kodu dosya sistemi türü anlamına gelmiyor, bu yüzden '0700' sgdisk için bir catchall tipine benziyor. En azından gördüğüm durumlarda.

PPS. partprobeSistemi yeniden başlatmadan bölümleme değişikliğinin farkına varmak için çekirdeğin çalıştırılması gerekebilir .


'p' size diskin UUID'sini gösterecektir. 'i' size bir bölümün UUID'sini gösterecektir.
Keith

2

Burada sadece bazı cevapları ve yorumları özetliyorum:

partedherhangi bir takılı bölümü değiştirmeyi reddedecektir. gdiskişi sizin için yapacak, ancak standart RHEL veya CentOS deposunda değil. Yine de EPEL deposunda.

Kullanımdaki bir diskteki bölümleri değiştirmenin, çekirdeğin değişiklikleri kaydetmesini engelleyebileceğini unutmayın. O, kullanımını olursa partprobe, partxya da yeniden başlatma.


1

Mantıksal bir birimi yeniden boyutlandırmayı mı düşünüyorsunuz? İşte nasıl yaparım:

vgextend vgname /dev/sdb3
lvextend -L +3T /dev/mapper/location
resize2fs /mount/point

VEYA (xfs):

xfs_growfs /mount/point -D <bytes>

muhtemelen ext2 / ext3 / ext4 kullanmıyor, aksi halde resize2fs anında çalışmalı mı?

1
@Antony Lee: geçtiğiniz takdirde -retmek lvextend, o zaman çağırır resize2fssizin için.
jmtd

0

fdisk bölüm hala son bölümse ve bölümün başlangıcı hareket etmiyorsa, hala kullanılabilir ve bunu yapabilir.

Ancak, bu büyük bir dikkatle yapılması gereken tehlikeli bir işlemdir. Yedekleme yapmak!

ec2-user@ip-10-0-20-15 ~]$ sudo fdisk /dev/nvme0n1

Welcome to fdisk (util-linux 2.30.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p
Disk /dev/nvme0n1: 24 GiB, 25769803776 bytes, 50331648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 70E4A118-98BD-4BF4-8DF9-6926A964902A

Device           Start      End  Sectors Size Type
/dev/nvme0n1p1    4096 16777182 16773087   8G Linux filesystem
/dev/nvme0n1p128  2048     4095     2048   1M BIOS boot

Partition table entries are not in disk order.

Command (m for help): d
Partition number (1,128, default 128): 1

Partition 1 has been deleted.

Command (m for help): n
Partition number (1-127, default 1): 1
First sector (34-50331614, default 4096):
Last sector, +sectors or +size{K,M,G,T,P} (4096-50331614, default 50331614):

Created a new partition 1 of type 'Linux filesystem' and of size 24 GiB.
Partition #1 contains a xfs signature.

Do you want to remove the signature? [Y]es/[N]o: n

Command (m for help): p

Disk /dev/nvme0n1: 24 GiB, 25769803776 bytes, 50331648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 70E4A118-98BD-4BF4-8DF9-6926A964902A

Device           Start      End  Sectors Size Type
/dev/nvme0n1p1    4096 50331614 50327519  24G Linux filesystem
/dev/nvme0n1p128  2048     4095     2048   1M BIOS boot

Partition table entries are not in disk order.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy

The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).

[ec2-user@ip-10-0-20-15 ~]$ sudo partprobe

[ec2-user@ip-10-0-20-15 ~]$ sudo fdisk -l
Disk /dev/nvme0n1: 24 GiB, 25769803776 bytes, 50331648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 70E4A118-98BD-4BF4-8DF9-6926A964902A

Device           Start      End  Sectors Size Type
/dev/nvme0n1p1    4096 50331614 50327519  24G Linux filesystem
/dev/nvme0n1p128  2048     4095     2048   1M BIOS boot

Partition table entries are not in disk order.

[ec2-user@ip-10-0-20-15 ~]$ sudo xfs_growfs /
meta-data=/dev/nvme0n1p1         isize=512    agcount=4, agsize=524159 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1 spinodes=0
data     =                       bsize=4096   blocks=2096635, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 2096635 to 6290939
```
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.