Programlı olarak disk bölümleme


10

Varolan bölüm (ler) ile bir disk üzerinde bir dosya sistemi ile yeni bir bölüm oluşturacak bir bash komut dosyası oluşturmaya çalışıyorum.

Ayrılmış olarak programlı bölümler oluşturmak kolay gibi görünüyor, ancak yeni bölümü nereden başlatacağınızı ve durduracağınızı bilmenizi gerektiriyor ve sorun yaşadığım yer burası.

Belirli bir konumda / boyutta bölümleri olan diske güvenmek istemiyorum. Yani, son var olandan hemen sonra yeni bir bölüm oluşturmak istiyorum. Sonra sabit bir boyutta bölüm oluşturmak veya kalan alanı doldurmak istiyorum.

Bash'te güvenilir bir şekilde

a) son bölümün son konumu ve
b) son bölümden sonra kalan bölümlenmemiş alan?


1
Yapabilirsen bile yapmazdım. Burada bir yazım hatası yapabileceğinizi düşünün ...
Joseph R.

Yapmasan iyi olur. Bazı dağıtımların yükleyicilerinin yeniden bölümlendiricileri vardır ve bir tane yazmak gerçekten basit bir görev değildir. Çok fazla köşe vakası, çok fazla şey karıştırabilirsiniz. Yapma. Bunu yaparsanız, operatör tarafından onaylanması gereken önerilen yapılandırmayı üretmesine izin verin.
peterph

Bunun tehlikeli olduğuna katılıyorum. Ancak bu, diskteki tüm bölümleri silerek başlayacak bir komut dosyasıdır, bu nedenle daha sonra bölümleri karıştırmak önemli değildir. Tek risk, kullanıcının herhangi bir bölüm aracıyla aynı derecede kolay olan yanlış diski belirtmesidir.
Alex

Yanıtlar:


4

partedboş alan yazdırabilir. Örnek (Karmaşık olanı bilerek seçtim):

# parted /dev/sda unit s print free
[...]
Number  Start      End        Size       Type      File system  Flags
        63s        2047s      1985s                Free Space
 1      2048s      4196351s   4194304s   primary   fat32        lba
        4196352s   4198399s   2048s                Free Space
 2      4198400s   6295551s   2097152s   primary   ext2         boot
        6295552s   6297599s   2048s                Free Space
 3      6297600s   27269119s  20971520s  primary   ext2
        27269120s  27271167s  2048s                Free Space
 4      27271168s  31115263s  3844096s   extended               lba
 5      27273216s  29192191s  1918976s   logical   ext2
 6      29194240s  31115263s  1921024s   logical   ext2
        31115264s  31116287s  1024s                Free Space

Gördüğünüz gibi bu, doğrudan oluşturabileceğiniz bölümün konumunu ve boyutunu, yani en son yazan satırı verir Free Space. 31115264 ile başlayan ve 31116287 ile biten bir bölüm oluşturabilirsiniz.

Genişletilmiş bölmenin yeterince büyük olmadığı bir tuzak olmasaydı!

Ama belki de zaten bu tür komplikasyonlardan muzdarip olmadığınız yerlerde GPT kullanıyorsunuz.

Sayıları yakalamak yeterince kolay olmalı.

function make_partition
{
    parted -s "$1" unit s mkpart primary "$2" "$3"
}

make_partition /dev/sda `parted /dev/sda unit s print free | grep 'Free Space' | tail -n 1`

Veya benzeri. (Doğal olarak burada biraz daha akıl sağlığı kontrolleri yapmak istersiniz.)

@swisscheese diğer cevap iyi bir yorum yaptı, partedsunulan ayrıştırma dostu çıktı bilmiyordum . Bunun yerine bunu kullanmayı tercih edebilirsiniz. Son büyük ücretsiz kapma örneği:

# parted -m /dev/sda unit s print free | grep 'free;' | sort -t : -k 4n -k 2n | tail -n 1
1:27269120s:27271167s:2048s:free;

Durumunuz için geçerli olup olmadığı (benim örneğimde, orada bir bölüm oluşturamadınız, gerçekten dolu) kendiniz için anlamanız gereken bir şey. :)


Teşekkürler! Referans olarak, make_partition işlevinizi kullandım ama biraz farklı argümanlarla: make_partition $ diskparted -m $disk unit s print free | grep "free;" | tail -n 1 | awk -F':' '{print $2 " " $3}'
Alex

-1

Kolay, mkpartedbir --listseçeneği var, son bölümü kullanmanız awk ve almanız --listve ardından kullanmanız mkpart part-type [fs-type] start end,

Ama cevabınız:

İlk başta tüm bölümleri almalısınız ve:

mystartgroup=`parted --list |awk {'print $2'}`
myendgroup=`parted --list |awk {'print $3'}`

Notlar:

  1. Dönüştürmeniz GBgerekir MG.
  2. Her birinin son değerini kullanmalısınız variable
  3. Sen kullanmalıdır -sGözlerinde farklı parted commandnihai senaryodaki.

Zamanım varsa, bu betiği tamamlayın, çünkü zamanım yok.


Merhaba, aslında önerdiğiniz komut dizilerini çalıştırdınız mı?
Yapmalarını

güncelledim, lütfen tekrar okuyun.
PersianGulf

seçenek 2 de değiştirildi.
PersianGulf

2
Merhaba, demek istediğim, 'parted --list | awk' {print $ 2} 'sadece körü körüne awk boruları! Ne istiyorsan almaz. Ayrıştırmak için "ayrıştırmaya uygun" çıktı sunan -m seçeneğini kullanmalısınız.
swisscheese

1
Söyleyecek başka bir şey yok, iyi şanslar.
swisscheese
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.