Ç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?
Ç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?
Yanıtlar:
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 fdisk
yardı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 partprobe
veya kpartx
(daha fazla bilgi) kullanabilirsiniz .
Adım 3.
Bölüm yeniden boyutlandırıldıktan ve bölüm tablosu yeniden yüklendikten resize2fs
sonra, 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
fdisk
diyor, partprobe
ya kpartx
yeniden 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. :)
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 swapon
tekrar 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/fstab
yeni takas cihazı adı ile güncellemeniz gerekir .)
Kök bölümünüz olsa bile, ext4 dosya sisteminin çevrimiçi olarak yeniden boyutlandırılması mümkündür. resize2fs
Komutu 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
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.
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.).
fdisk
ne zaman growpart
çok kolaylaştıracağınızla dalga geçmeyin.
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 .
sfdisk: /dev/nvme0n1p5: does not contain a recognized partition table
(pencereli çift önyükleme kullanarak)
gparted
için kullanmanızı öneririm .
apt-get install cloud-utils
/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.
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_root
etmek tmpfs
, böylece yapabilirsiniz umount
güvenle kök bölümü onunla yaşamak ve keman. Bir kez yapılırsa, pivot_root
yeni 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.
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.
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]#
@ 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 / Solaris
ve 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.
mkswap
& swapon
komutları sda2'de çalıştırılmalıdır. swapoff
Yazımın başında bir hata yaptım: sda5'te yürütülmesi gerekiyor. Yorumlar her zaman beklerim, not almak zordu.
cryptdisks_stop
, sonra yerine / etc / crypttab komutunu güncellemeli /etc/fstab
ve cryptdisks ile yeniden başlatmalısınız cryptdisks_start
.
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_root
ya 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).
Bu adımları takip et.
su
parted
p
kullanılabilir bölümleri görmek için yazınrm PARTITION NUMBER
boş alan oluşturmak için kullanarak silin .resizepart ROOT NUMBER
gerekirse , yazarak kök boyutunu artırın ve gerekirse sistemi yeniden başlatınparted
yazarak exit
ve terminal türünden çıkın partprobe
ve enter tuşuna basın (yeniden başlatmadan sonra bile yapılabilir)resize2fs /dev/sda PARTITION NUMBER
ve geniş kök bölümünün tadını çıkar.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.