Çevrimiçi EXT4 birimini LVM ile daraltmak mümkün mü?


47

Bugün OpenSUSE 12.3 (çekirdek 3.7) ile makinemde bunu denedim:

# resize2fs /dev/mapper/system-srv 2G
resize2fs 1.42.6 (21-Sep-2012)
Filesystem at /dev/mapper/system-srv is mounted on /srv; on-line resizing required
resize2fs: On-line shrinking not supported

/dev/mapper/system-srv EXT4 birimidir.

Gerçekten desteklenmiyor mu, yoksa bir şey mi kaçırıyorum?

Yanıtlar:


68

Mesajın dediği gibi, sadece on-line bir dosya sistemi yetiştirebilirsiniz . Küçültmek istiyorsanız, önce çıkarmanız gerekir.

Ext4 dosya sistemi sağlayıcısı Ted Ts'o'ya göre:

Üzgünüz, çevrimiçi küçültme desteklenmiyor.


12
Yazık ki ...
Alicia

5
Oyunun nesi var?
Michael Hampton

16
@ MichaelHampton - haberci çekim bazı moron? : D
tink

2
Bu 10 yıl önceydi. Bu henüz uygulandı mı?
duane

@duane Hayır. Olması da muhtemel değildir.
Michael Hampton

16

Evet, herhangi bir yeniden başlatmadan bir 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.

resize2fs çevrimiçi ext4bölümleri küçültemez . Bu sınırlama, kök bölüme uygulandığında, bölümün küçülmesine izin vermek için ana bilgisayarı yeniden başlatmaktan kaçınamayacağınızı root, bu da kaçınmak istediğiniz bir şey olabilir. Bağlantılı işlem, kök bölümlerini herhangi bir yeniden başlatma işlemi yapmadan düzenlemenizi sağlar. Bu nedenle, bu ışık altında, bölümün monteli durumuna ilişkin olarak kesinlikle çevrimiçi olarak yeniden boyutlandırmadan bahsetmiyor, ancak ağın çevrimiçi durumu ya da sunucunun erişilebilirliği ile ilgili olarak bir çevrimiçi yeniden boyutlandırma olmaya devam ediyor.

Tabii ki, yalnızca ext4 bölümünüzü büyütmek istiyorsanız, geleneksel çalışma resize2fsçözümlerine bağlı kalmalısınız .

Bağlandığım genel çözüm, örneğin herhangi bir özel veya VPS çözümü üzerinde çalışacaktır.

TLDR; Bu çözüm için ima pivot_rootetmek tmpfsyapabilirsiniz böylece umountonunla güvenle kök bölümü canlı ve keman. Bir kez yapılırsa, pivot_rootyeni kök bölümünüze geri dönersiniz.

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

Bunu şahsen kullandım ve debian sisteminde de çok iyi çalışıyor, ancak rehber ilk olarak 2007'de redhat için yazılmıştı, bağladığım cevap CentOS7 için güncellendi. Her ne kadar muhtemelen bazı uyarlamalar olsa da, OpenSUSE'nizde çalışacak olması muhtemel.


4
Bu, "çevrimiçi büyüme" ile karşılaştırıldığında "çevrimiçi" değildir. Tüm hizmetler kapalı olmalı ve kök dosya sisteminize erişilemez hale gelmelidir. Bu yorumdaki canlı veya initramfs / rdshell yaklaşımı ile karşılaştırmaya değer olabilir. İnsanların kafasını karıştırmasından nefret ediyorum.
Brian Chrisman

2
@BrianChrisman Bu gerçekten açıklığa kavuşturmayı hak eden ve benim yazımda bir düzenleme ile ele aldığımı umuduyla bir sonuçtur. Geri bildiriminiz için çok teşekkürler.
vaab

Başvurulan çözümle ilgili hoşuma giden şey 'neredeyse çevrimiçi' olmasıdır. Bu özel şeyi küçük bir betiği ve araçları dracut komutuna kodlayarak yaptım ve elde edilen initramları kexec'ten başlattım. Bu bir şekilde bir ssh oturumunu işlem boyunca açık tutabilseydi, bu en iyisi olurdu. Sanırım sahte kökünü sshd ve gerekli dosyalar ile oluşturursanız, başka bir sshd (çünkü ssh'd içerisindeyseniz) başka bir portta başlatırsanız, o zaman sistemi lootomize etmeye devam etmeden önce diğer ssh için ssh ve bağlantıyı doğrulayabilirsiniz.
Brian Chrisman

13

Durum konsolsuz bir uzak sunucuysa, yeniden başlatırken initramfs kullanarak dosya sistemini daraltabilirsiniz. Kök bağlamadan önce inizeramfs'e resize2fs eklemeniz ve çalıştırmanız gerekir.

Debian / Ubuntu örneği:

/ etc / initramfs-tools / hooks / resizefs (çalıştırılabilir):

#!/bin/sh

set -e

PREREQS=""

prereqs() { echo "$PREREQS"; }

case $1 in
    prereqs)
        prereqs
        exit 0
    ;;
esac

. /usr/share/initramfs-tools/hook-functions

copy_exec /sbin/e2fsck
copy_exec /sbin/resize2fs

exit 0

/ etc / initramfs-tools / scriptler / local-premount / resizefs (çalıştırılabilir)

#!/bin/sh

set -e

PREREQS=""

prereqs() { echo "$PREREQS"; }

case "$1" in
    prereqs)
        prereqs
        exit 0
    ;;
esac

/sbin/e2fsck -yf /dev/sda1
/sbin/resize2fs /dev/sda1 5G
/sbin/e2fsck -yf /dev/sda1

Şimdi update-initramfs komutunu çalıştırın, bilgisayarı yeniden başlatın, boyutu kontrol edin, bu komut dosyalarını kaldırın ve intiramfs komutunu tekrar kaldırın.

Dracut (Fedora, CentOS) için aynı mantığı kullanın (/usr/lib/dracut/modules.d).

Bu, yeni bölüm için boş alan kalmayacak şekilde rootfs'ları şifrelemek veya taşımak için çok kullanışlıdır.


2
Bu bir cazibe gibi çalışır. Update-initramfs komutunu -u seçeneğiyle çalıştırmanız gerektiğini unutmayın.
Diomidis Spinellis

Güzel. Benim durumumda da ihtiyacım vardı update-grub.
Wojciech Kaczmarek,
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.