Bash komut dosyası GPT için ayrıldı


1

Bash & amp; Ubuntu 12.04'teki Python scriptleri, müşterilere bir dosya olarak disk imajı sağlıyoruz ( dd ). bir Zamanlar dd ’Yeni diskte, diski sığacak bölümü yeniden boyutlandırdık. Şimdi GPT diskleri kullandığımıza göre, etkileşimli olmayan, X olmayan bir komut dosyası vermem gerekiyor.

Problem şu parted etkileşimli bir mesaj oluşturur:

Hata: Yedek GPT tablosu, diskin sonunda değil   olmalı. Bu, başka bir işletim sisteminin   disk daha küçük. Yedeklemeyi sonuna kadar hareket ettirerek düzeltin (ve   eski yedek)? İptal / Ignore / Fix?

Ama kullanarak -s veya -m bölümlü anahtar Diski yeniden boyutlandırmak ve GPT yedek konumunu düzeltmek için alamıyorum. Komuta "F" de ekleyemiyorum:

echo "F" > parted  /dev/sda resize 2 0% 100%
parted  /dev/sda resize 2 0% 100%
parted -m /dev/sda resize 2 100%
parted -s /dev/sda resize 2 100%

Ve bunun gibi. gdisk ve sgdisk yeniden boyutlandırmak mümkün görünmüyor. gparted iyi çalışıyor ancak X’in elbette ve izin yok

CLI'den interaktif mesajı backticks ile susturabilirim:

`parted -s /dev/sda rm 2`  ( succeeded with error)
`parted -s /dev/sda mkpart primary 100%` ( fails because the backup GPT was not moved)

Bu yüzden etkileşimli mesajda sunulan ve yalnızca orada sunulan özel "GPT yedeklemesini taşıma" hizmetine ihtiyacım var, ancak etkileşimli olarak çalışmam gerekiyor.

Yanıtlar:


2

Dru'nun yaklaşımı işe yarayacak, ancak test etmedim. Diğer iki yaklaşım bir arada kullanmaktır. sgdisk ve partedveya kullanmak sgdisk daha karmaşık bir şekilde. Özellikle, şunlardan birini yapabilirsiniz:

  • kullanım sgdisk -e yedekleme bölümü tablosu verilerini diskin sonuna taşımak için parted {device-file} resize... bölümü yeniden boyutlandırmak için. Biri yerine iki yardımcı programı kullanmak biraz tuhaf, ancak çalışması gerekiyor.
  • kullanım sgdisk -e {device-file} yedekleme bölümü tablosu verilerini diskin sonuna taşımak için sgdisk -d... bölümü silmek sgdisk -n... yerine yeni bir bölüm oluşturmak için. Muhtemelen bunları sadece iki hatta belki bir çağrıya birleştirebilirsiniz sgdisk. Bir uyarı, bu yaklaşımın bölüm için GUID değerini değiştireceği yönündedir. Aynı kalması önemliyse, bu verileri çıkarmanız ve GUID değerini sıfırlamanız gerekir - veya bilinen bir görüntüden başladığınızdan, GUID değerini komut dosyanızın bir parçası olarak depolayabilir ve sıfırlayabilirsiniz. ilk çıkarmadan.

Bu yaklaşımların hiçbirini test etmediğimi unutmayın, bu yüzden Dru'nun yöntemini garanti edebileceğimden daha fazlasını garanti edemiyorum.


Ayrıca iyi bir fikir @Rod Smith. Bunları pazartesi günü işte test edeceğim.
John P. Fisher

Bunu kullanacağım: sgdisk -e /dev/sda ; sgdisk -d 2 /dev/sda ; sgdisk -N 2 /dev/sda
John P. Fisher

Not: kullanırsanız sgdisk - sadece yaklaşımda, o bölümdeki dosya sistemini de yeniden boyutlandırmanız gerekir. Ayrıca, yeni bölümün başlangıç ​​sektörünün orijinaliyle aynı kalması önemlidir. Kullanırsanız bu garanti edilmez sgdisk -N, orijinal bölümün nasıl oluşturulduğuna bağlı olarak iyi çalışmasına rağmen.
Rod Smith

Sgdisk yazdığına inanıyorum? bilmen gerekir! ama .... df ve gparted siz yaptıktan sonra hemfikir değil. Rod'un dediği gibi yapmalısın. resize2fs ve ayrıca bir e2fsck önce resize2fs. E2fsck'in gerekli olup olmadığından veya sadece iyi bir fikir olduğundan emin değil.
John P. Fisher

2

Koşabilirsin expect Bash komut dosyanızdan komut dosyası parted soruyu cevaplamak için.

#!/usr/bin/expect
eval spawn parted  /dev/sda resize 2 0% 100%
expect "Error: The backup GPT table is not at the end of the disk, as it should be. This might mean that another operating system believes the disk is smaller. Fix, by moving the backup to the end (and removing the old backup)? Fix/Ignore/Cancel? "
send "F\r"
expect eof

Bu iyi bir fikir @ Dru.
John P. Fisher
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.