Çalışma zamanında bir dış kök bölümünü nasıl yeniden boyutlandırabilirim?


236

Çalışma zamanında bir sistemin kök bölümünün boyutunu nasıl artırabilirim?

Kök bölümden sonra ayrılmayan bir bölüme sahibim (ayrıca ext4'tür), bu ayrılmamış alanı sunucuyu kapatmak zorunda kalmadan kök bölüme ayrılan alana nasıl ekleyebilirim?


3
Çamurda bir çubuk gibi görünmekten nefret ediyorum ama bu oldukça riskli mi? Bunun neden olması gerekiyor? Çalışma süresi ana kısıtlama mı?
Bulut,

Bir bölümü sola doğru yeniden boyutlandıramazsınız, çünkü bu aslında bir hareket olacaktır.
Zaz

5
Çevrimiçi ext4 parite boyutlarını artırmak kolaydır. Zor kısım küçülüyor olacak (manşetiniz "yeniden boyutlandırma" ile ilgili). Çalışma zamanında bir kök bölümdeki (taşıma, küçültme, dosya sistemini değiştirme, aygıt) HERHANGİ bir manipülasyonla ilgilenen insanlar benim cevabına bakmalı
vaab

Yanıtlar:


214

GUI (Ubuntu 14.04 ve üstü) : GParted v0.17 ve üstü bunun için hoş bir GUI sağlar. (Eski sürümler, monte edilmiş bir bölümü yeniden boyutlandırmayı reddeder).

Komut satırı (herhangi bir Ubuntu sürümü): Bunun için üç adım var.

Adım 1. Bölüm önce yeniden boyutlandırılmalıdır. LVM kullanıyorsanız, bu kolaydır ve muhtemelen nasıl devam edeceğinizi biliyorsunuzdur. Klasik bölümleri kullanıyorsanız, biraz daha karmaşıktır ve yeniden başlatılması gerekebilir (başka bir sistemi veya canlı CD'yi yüklemek zorunda kalmamanıza rağmen).

Bunu şöyle yapıyorum: fdiskÖnce bölümü silmek için kullanın (fikir diskteki verilerin korunacağı fikridir), ardından aynı konumda daha büyük bir boyutla dikkatlice yeniden oluşturun.

Örnek:

$ sudo fdisk /dev/sda

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     9437183     4717568   83  Linux

Command (m for help): d
Selected partition 1

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):
Using default value 10485759

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    10485759     5241856   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 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)
Syncing disks.

Yine, yeni bölümün eskisi ile aynı blokta başlaması çok önemlidir. Id aynı zamanda eşleşmelidir (Linux sistemleri için 83). En küçük yazım hatası yaparak tüm verilerinizi kaybetmeye hazır olun.

Güvenli tarafta olmak için düğmesine basarak önyükleme bayrağını da ( Wikipedia'ya göre hala gerekli olan) geri yükleyebilirsiniz a.

Takas bölümünüzün yolunda olması durumunda ne yapılması gerektiği hakkında yorum bölümüne bakın.

Şimdiye kadar insanların neden canlı bir CD kullanmanızı önerdikleri açıkça görülmelidir. ;-)

Adım 2. gibi fdiskyardımsever ilerlemeden önce bölüm tablosunu yeniden yüklemeniz gerekir, hatırlatır. En güvenli yol, basitçe yeniden başlatmaktır; ama ayrıca partprobeveya kpartx (daha fazla bilgi) kullanabilirsiniz .

Adım 3. Bölüm yeniden boyutlandırıldıktan ve bölüm tablosu yeniden yüklendikten resize2fssonra, dosya sisteminde çalışan basit bir işlemdir ve bunu kök bölüm olarak takılıyken bile yapabilirsiniz.

Örnek:

$ sudo resize2fs /dev/sda1

16
Bu benim için mükemmel çalıştı. Ancak, ek olarak tutulan önyükleme bayrağının orijinal durumda olduğundan emin oldum.
Augustus Kling

4
@ jbo5112: As fdiskdiyor, partprobeya kpartxyeniden başlatma yerine çalışabilir; ayrıca bu soruya bakınız . Yeniden başlatsanız bile, çözüm hala bir sanal makine için basit bir yeniden başlatmanın 10 saniyeden daha az olabileceği, çalışmama süresi söz konusu olduğunda canlı bir CD kullanmaktan daha çok tercih edilir. Operatör zamanında da daha hızlıdır, bu yüzden bu yaklaşımı kendim kullanırım. :)
Søren Løvborg

1
@Raymond: Bellek basıncı izin veriyorsa (bkz free -h), takas ( swapoff /dev/sda2) işlevini devre dışı bırakın , bölüm tablosunu değiştirin (takas bölümünün silinmesi ve yeniden yaratılması dahil) ve 1) yeniden bölümlendirin veya 2) bölüm tablosunu yeniden yükleyin ve swapontekrar yerleştirin. (Bellek takası geçici olarak devre dışı bırakmak için çok sıkıysa, yine de yeni bir takas bölümü ( /dev/sda3) oluşturabilir ve etkinleştirebilirsiniz , sonra takas edebilirsiniz sda2; ancak daha sonra /etc/fstabyeni takas cihazı adı ile güncellemeniz gerekir .)
Søren Løvborg

1
Vmware kullanıyorsanız ve diskin boyutunu genişletmişseniz, vm'nin daha büyük sürücüyü tanıması için dosya sistemlerini yeniden taramak için sudo lshw -C diskini çalıştırmanız gerekecektir. Ardından yukarıdaki talimatları izleyin.
Guy

2
Küçülenmeye ne dersin?
Aaron Franke

114

Kök bölümünüz olsa bile, ext4 dosya sisteminin çevrimiçi olarak yeniden boyutlandırılması mümkündür. resize2fsKomutu kullan .

sudo resize2fs /dev/sda1

EDIT: Çevrimiçi küçültmeye izin verilmez:

root@brunojcm-htpc:/home# resize2fs /dev/sda5 2654693
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/sda5 is mounted on /; on-line resizing required
resize2fs: On-line shrinking not supported

55
Kimden man resize2fs: The resize2fs program does not manipulate the size of partitions. If you wish to enlarge a filesystem, you must make sure you can expand the size of the underlying partition first. This can be done using fdisk(8) by deleting the partition and recreating it with a larger size or using lvextend(8),if you're using the logical volume manager lvm(8).Bu soru, dosya sistemini değil bölümü yeniden boyutlandırma ile ilgilidir . Bu ayrım ince ancak çok önemlidir.
Eliah Kagan

8
Kök parçasını silmek ve sonra aynı başlangıç ​​bloğunda yeniden oluşturmak için fdisk'i kullanabilirsiniz. fdisk değişikliği yazacak, ancak yeniden başlatmadan sonrasına kadar geçerli olmayacak. Yeniden başlattıktan sonra, parmenti doldurmak üzere diski göndermek için resize2fs programını kullanabilirsiniz.
James Becwar,

3
Çevrimiçi olarak bir ext4 kök bölümünü yeniden boyutlandırdım. Bu nedenle mümkün olduğunu onaylayabilirim. Ancak resize2fs parametresi olarak / dev / sda * parametresini değiştirmek yerine, mantıksal birim adını iletmeniz gerekir.
CDR

10
Resize2fs manpage'in ilk paragrafını ilk soru için en ilginç buluyorum :The resize2fs program will resize ext2, ext3, or ext4 file systems. It can be used to enlarge or shrink an unmounted file system located on device. If the filesystem is mounted, it can be used to expand the size of the mounted filesystem, assuming the kernel supports on-line resizing. (As of this writing, the Linux 2.6 kernel supports on-line resize for filesystems mounted using ext3 and ext4.).
mo

5
Lütfen bunu sizin için fdiskne zaman growpartçok kolaylaştıracağınızla dalga geçmeyin.
STRML

54

Daha kolay bir çözüm - kullanım growpart <device> <partition>:

growpart /dev/xvda 1  # Grows the partition; note the space
resize2fs /dev/xvda1  # Grows the filesystem

Her zaman olduğu gibi, bölme tablonuzu ( sfdisk -d /dev/xvda > partition_bak.dmp) yedekleyin .


Küçülenmeye ne dersin?
Aaron Franke

Bu yöntemi kullanmayı umuyordum, ancak aldım sfdisk: /dev/nvme0n1p5: does not contain a recognized partition table(pencereli çift önyükleme kullanarak)
monkut

Küçültme on-line yapmak mümkün değildir. Bunun gpartediçin kullanmanızı öneririm .
STRML

4
growpart bulut-araçlarının bir parçasıdır. Kurmadığınız takdirde apt-get install cloud-utils
klor

1
@ monkut Partiye geç kaldı, ancak diskiniz büyük olasılıkla /dev/nvme0n1. p5 bu diskteki bölüm 5'tir. Geleneksel BSD disk dilimleri ile karşılaştırın, benzer bir numaralandırma düzeni kullanın.
Per Lundberg,

12

Evet, herhangi bir yeniden başlatmadan bir çevrimiçi kök bölümünü küçültebilir / taşıyabilir / büyütebilirsiniz (veya canlı anahtar veya usbkey): bu cevaba bakın . Oldukça uzun ve biraz riskli olmasına rağmen çok iyi yazılmış ve takip etmesi kolay. Dolayısıyla, yalnızca ext4 bölümünüzü büyütmek istiyorsanız, geleneksel çalışma resize2fsçözümlerine bağlı kalabilirsiniz .

İçinde bulunduğum genel çözüm, örneğin herhangi bir özel veya VPS çözümü üzerinde çalışacak.

TLDR; Bu çözüm için ima pivot_rootetmek tmpfs, böylece yapabilirsiniz umountgüvenle kök bölümü onunla yaşamak ve keman. Bir kez yapılırsa, pivot_rootyeni kök bölümünüze geri döneceksiniz.

Bu, kök dosya sisteminde hemen hemen tüm manipülasyonlara izin verir (taşıyın, dosya sistemini değiştirin, fiziksel aygıtını değiştirin ...).

Hiçbir yeniden başlatma işleminde gereklidir ve bu sınırlamayı atlamasına izin verir ve resize2fs küçültmek mümkün olmayan ext4 bölümleri.

Bunu şahsen kullandım ve debian sisteminde de çok iyi çalışıyor, bu yüzden Ubuntu'da çalışması gerekiyor. Bu derinlemesine çözümü, aynı sorunla ilgilenen stackexchange web sitelerinde yer alan birçok soruya biraz daha bağlı görmeme konusunda çok şaşırdım.

Not: Tabii ki, bölümünüzü büyütmek istiyorsanız resize2fs, burada sayısız yerde ve diğer cevaplarda belirtildiği gibi basit yeterli olacaktır.


4
Bence çoğu insan, kök bölüme erişen tüm programları ve hizmetleri durdurduktan sonra, makineyi yeniden başlatmış olabilirsiniz. Küçültmek / taşımak için, canlı CD kullanmaktan daha hızlı olabilir, ancak büyümek için (en yaygın görev ve OP'nin sorduğu şey), sistemin çoğunun geçici olarak kapatılmasını gerektirmeyen yollar vardır. .
Søren Løvborg

2
@ SørenLøvborg: Tam prosedürü yaparken sürekli üretime ihtiyaç duyan temel hizmetleri yeniden başlatabilirsiniz. LiveCD'yi (VPS örnekleri, özel sunucular ...) veya belirli nedenlerden dolayı yeniden başlatmalardan kaçınmak istediğiniz durumları koyamayacağınız birçok yapılandırma vardır. Orijinal sorunun başlığı, çevrimiçi olarak daralan bölümleri arayan insanları çeken "yeniden boyutlandırma" dır. ** Başka hiçbir çözüm, ext4'ün çevrimiçi ortamda küçültülmesine izin vermez. ** Bu çözüm riskli, karmaşıktır, ancak hepsinden daha güçlüsüdür ve diğerlerinin eksikliklerini doldurur.
vaab

1
Lütfen dış bağlantılara bağlı olarak cevap göndermeyin. İlgili bölümü cevabınıza yerleştirin veya bağlantıyı soruya yorum olarak gönderin. Detaylar için Nasıl Cevaplanır ? Bölümüne bakın.
Melebius

10

Ayrıca GParted'den de faydalanabilirsiniz - yeniden boyutlandırdığınız bölüm önyüklemekte olduğunuz bölüm değil - başka bir deyişle, canlı CD seçeneğinin yeni başlayanlar için biraz daha kolay olduğunu düşünüyorum.

GParted, temelde tüm adımları uygular - yalnızca bir önyüzlü GUI'ye dayanır.


Sistemimi Ubuntu 12.04 Live CD ile başlattım ve extart bölümünü GParted ile yeniden boyutlandırdım. Benim için iyi çalıştı. Her neyse, bu işlemden önce tüm önemli verilerimi yedekledim.
StandDuPp

Bence, gparted bölümlenmemiş bölüm istiyor. ama yanılıyor olabilirim.
Nick

Asıl soru, önyükleme yaptıkları bölümle ilgili ve canlı bir CD'yi başlatmak, makinenin yeniden başlatılmasını gerektiriyor. -1
wjandrea

5

Kök takılıyken canlı bir sistemde ext4 kök bölümünü yeniden boyutlandırmayı yeni bitirdim.

[root@habib i686]# resize2fs /dev/vg_habib/lv_root
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/vg_habib/lv_root is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 10
Performing an on-line resize of /dev/vg_habib/lv_root to 38427648 (4k) blocks.
The filesystem on /dev/vg_habib/lv_root is now 38427648 blocks long.

[root@habib i686]# 

5

@ Søren Løvborg'un cevabını genişletmek istiyorum: bölümü takas bölümü mevcut olacak şekilde genişletmek.

Öncelikle diski yerleştirdikten sonra düzeni:

$sudo parted /dev/sda 'unit s print' free
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 14336000s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start      End        Size       Type      File system     Flags
        63s        2047s      1985s                Free Space
 1      2048s      10485759s  10483712s  primary   ext4            boot
        10485760s  10487805s  2046s                Free Space
 2      10487806s  12580863s  2093058s   extended
 5      10487808s  12580863s  2093056s   logical   linux-swap(v1)
        12580864s  14335999s  1755136s             Free Space

Bu nedenle sda1 diskin sonundaki boş alanla genişletilmelidir, ancak takas bölümü aralarındadır. Bunu nasıl yapabilirsiniz:

Öncelikle takas işlemini devre dışı bırakmamız gerekiyor. Ne kadar kullanıldığını ve kapatıp kapamayacağınızı kontrol edin.

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           992M         52M        464M        3.2M        475M        784M
Swap:          1.0G          0B        1.0G

takas burada kullanılmaz, böylece kapatırız.

$sudo swapoff /dev/sda5

Şimdi bölüm tablosunu değiştireceğiz:

$sudo fdisk /dev/sda

(not: ilk bölümün 2048 yerine 63 sektördan başlaması durumunda, seçeneği eklemeniz gerekir -c=dos)

Welcome to fdisk (util-linux 2.27.1).
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/sda: 6.9 GiB, 7340032000 bytes, 14336000 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: dos
Disk identifier: 0x9e11c6df

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sda1  *        2048 10485759 10483712    5G 83 Linux
/dev/sda2       10487806 12580863  2093058 1022M  5 Extended
/dev/sda5       10487808 12580863  2093056 1022M 82 Linux swap / Solaris

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

Partition 2 has been deleted.

Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-14335999, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-14335999, default 14335999): 12242941

Created a new partition 1 of type 'Linux' and of size 5.9 GiB.

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (12242942-14335999, default 12242944):
Last sector, +sectors or +size{K,M,G,T,P} (12242944-14335999, default 14335999):

Created a new partition 2 of type 'Linux' and of size 1022 MiB.

Command (m for help): a
Partition number (1,2, default 2): 1

The bootable flag on partition 1 is enabled now.

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).

Not: sda1'in boyutu, takas bölümünüzün sektör boyutunun eksi toplam sektör sayısıdır: 14335999-2093058 = 12242941

Fdisk'in dediği gibi: Çekirdek hala eski bölüm tablosunu kullanıyor, bu yüzden yeniden yüklememiz gerekiyor.

$partprobe

Şimdi sda1 üzerinde resize2fs komutunu çalıştırmamız gerekiyor (bunu unutma!)

$resize2fs /dev/sda1
resize2fs 1.42.12 (29-Aug-2014)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 10
The filesystem on /dev/sda1 is now 38833617 (4k) blocks long.

Şimdi, işler henüz bitmedi. Muhtemelen fark ettiğiniz gibi sda2 Linux (Ext4) tipi olarak bölümlendirilmiştir. Bazı nedenlerden dolayı, fdisk'te türü seçmenin bir yolu yoktur. Bu yüzden kullanarak onu değiştirmeliyizcfdisk

$ sudo cfdisk

Sda2'yi seçin ve türünü değiştirin 82 Linux swap / Solarisve yazdığınızdan emin olun (onaylamak için evet yazın)

Şimdi değiş tokuşu tekrar aktif hale getirebiliriz

$mkswap /dev/sda2
/dev/sda2
UUID=d58bf1cb-d27a-487d-b337-056767fd5ad6 none swap sw 0 0

Ve sonunda aç:

$swapon /dev/sda2

Yapmamız gereken tek şey, önyüklemenin ardından takas bölümünü otomatik olarak monte etmek için fstab'ı güncellemektir

$sudo nano /etc/fstab

Takas bölümünün UUID değerini yukarıdaki çıktıya değiştirin:

# swap was on /dev/sda5 during installation
UUID=d58bf1cb-d27a-487d-b337-056767fd5ad6 none            swap    sw              0       0

Şimdi her şey yolunda ve sorunsuz bir şekilde yeniden başlatabilirsiniz.


swap bölümleme tipini değiştirmeye gelince, fdisk buy t işleminde t sonra 5 (bölüm 5) sonra 82 (Linux swap / Solaris yazın)
Oz Edri

2. bölüm uzatılmamalı mı? (ve sonra fdisk'te p yerine e seçmeliyiz) Ayrıca, mkswap ve swapon komutlarının sda2 yerine / dev / sda5 ile çalıştırılmaması gerekir mi?
Oz Edri

1
Takas bölümleme tipi için: Diğer talimatlarda fdisk türünü gerçekten seçebileceğinizi ancak bir şekilde sürümümde çalışmadığını gördüm. Neyse, her zaman cfdisk ile çalışacak
wouter205

1
Takas bölümü için: genişletilmiş bir bölüm kullanabilirsiniz, ancak sonra iki bölüm eklemeniz gerekir: genişletilmiş ve mantıklı bir bölüm (ilk bölüm düzenime bakın). Örneğimde 2 ana bölüm var: sda1 - ext4 - root partition & sda2 - swap partition. Bu yüzden mkswap& swaponkomutları sda2'de çalıştırılmalıdır. swapoffYazımın başında bir hata yaptım: sda5'te yürütülmesi gerekiyor. Yorumlar her zaman beklerim, not almak zordu.
wouter205

1
Takas bölümü şifrelendiğinde ilk önce cryptdisks ile durmalı cryptdisks_stop, sonra yerine / etc / crypttab komutunu güncellemeli /etc/fstabve cryptdisks ile yeniden başlatmalısınız cryptdisks_start.
Dmitri Chubarov

1

Bunu , Ubuntu 16.04, 4.4.0 çekirdeğinde 3.2 bölümlenmiş kullanarak ana bölümün geçici olarak kaldırılması olmadan umount, pivot_rootya da geçici olarak kaldırılmadan yaptım . Dikkatli olmak için, ağ devre dışı bırakılmış sanal bir konsoldan her şeyi yaptım ve durumdan önce bir anlık görüntü aldım, ancak anlık görüntü gerekli değildi, bu yüzden SSH aracılığıyla ve çalışma seviyelerini değiştirmeden de yapabilirdim.

Bölüm boyutunu belirle: parted /dev/sda1 print | egrep "Disk.*GB"

İsteğe bağlı olarak ağ bağlantısı olmadan çok kullanıcılı moda geçin (SSH'den değil, bir konsoldan yapılmalıdır):

runlevel     # remember the original runlevel
init 2

İsteğe bağlı olarak temkinli olmak için bir VM anlık görüntüsünü alın.

Bölümü yeniden boyutlandır:

parted
p
resizepart NUMBER SIZE
# answer "Yes" when asked about resizing a live partition.
q

Dosya sistemini yeniden boyutlandır: resize2fs /dev/sda1

Eğer bir şeyler ters giderse, enstantanenizi buradan geri yükleyebilirsiniz. Tüm güzel giderse, (yukarıda elde edilen) normal çalışma seviyesi dönmek - normalde 5: init 5. Her şeyin yolunda döndüğünden emin olmak için bu noktada tam bir yeniden başlatma yapmak daha iyi olabilir (daha sonra bir tarih / ntp sorunu yaşadım).


1

Bu adımları takip et.

  1. süper kullanıcı olarak açık terminal su
  2. Çalıştırmak parted
  3. pkullanılabilir bölümleri görmek için yazın
  4. kök bölüm numaranızı tanımlayın (ör: 'sda 3', sayı 3 anlamına gelir) ve bitişik bir bölümü rm PARTITION NUMBERboş alan oluşturmak için kullanarak silin .
  5. Şimdi resizepart ROOT NUMBERgerekirse , yazarak kök boyutunu artırın ve gerekirse sistemi yeniden başlatın
  6. partedyazarak exitve terminal türünden çıkın partprobeve enter tuşuna basın (yeniden başlatmadan sonra bile yapılabilir)
  7. Sonunda koş resize2fs /dev/sda PARTITION NUMBERve geniş kök bölümünün tadını çıkar.

0

Daha önce belirtildiği gibi:

  • kök sistemden canlı olarak genişletmek mümkündür (önyükleme bölümü taşınamadığı için zorluk yoktur).

  • Canlı bir kök bölümünün küçültülmesi, harici bir önyükleme aygıtından (canlı sistem cd / usb-stick'ten önyükleme) yapılması gerekiyor, sanki herhangi bir hata varmış gibi, uyumsuzluk. doğru önyükleme yapabiliyor.

Her türlü "ama ben yaptım ve işe yarıyor" saf şans.

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.