Yeniden başlatmadan bölüm tablosunu yeniden oku?


71

Bazen, bir diskteki bölümleri yeniden boyutlandırırken veya başka bir yerde kullanmazsanız, cfdisk şunları söyler:

Wrote partition table, but re-read table failed. Reboot to update table.

(Bu, diğer bölümleme araçlarıyla da olur, bu yüzden bunun bir cfdisk sorunundan ziyade bir Linux sorunu olduğunu düşünüyorum.) Bu neden ve neden sadece bazen oluyor ve bundan kaçınmak için ne yapabilirim?

Not: Lütfen düzenlediğim bölümlerden hiçbirinin açılmadığını, takılmadığını veya kullanımda olmadığını varsayalım.


Güncelleme:

cfdisk, ioctl(fd, BLKRRPART, NULL)Linux'a bölüm tablosunu yeniden okumasını söyler. Şu ana kadar önerilen diğer araçlardan ikisi ( hdparm -z DEVICE, sfdisk -R DEVICE) aynı şeyi yapıyor. partprobe DEVICEKomut, diğer taraftan, daha iyi olabilir BLKPG adlı yeni ioctl, kullanımı görünüyor; Bilmiyorum. (BLKPG başarısız olursa da BLKRRPART'a geri döner.)

BLKPG, "bu bölüm değişti; işte yeni boyut" operasyonu gibi görünüyor partprobeve cihazdaki tüm bölümlerde ayrı ayrı adlandırılmış gibi görünüyordu , bu nedenle ayrı bölümler kullanılmamışsa çalışması gerekir. Ancak, denemek için fırsatım olmadı.


1
man sfdiskdiyor ki:Since version 2.26 sfdisk no longer provides the -R or --re-read option to force the kernel to reread the partition table. Use blockdev --rereadpt instead.
Tom Hale

Yanıtlar:


66

IMHO en güvenilir / en iyi cevap

partprobe /dev/sdX

1
Sadece Ubuntu Sunucusu altında bir geliştiriciyi genişlettim, bu aygıt bir donanım baskını oldu. Baskın baskınını, baskın denetleyicisini kullanarak genişlettikten sonra, dosya sistemini çıkardım ve "partprobe / dev / sda" ı denedim - bu işe yaramadı. "fdisk -l" hala eski boyutunu gösterdi. Daha sonra "hdparm -z / dev / sda" yazdım ve bu işe yaradı. Dosya sistemimi yeniden başlatmadan bağlayıp yeniden boyutlandırabilirim. YMMV'den başka bir şey eklemediğimi biliyorum.
Mwuanno

6'şayımlardayım; çekirdek 2.6.32. Tüm aşağıdaki komutlar çekirdek tekrar okuyun bölümü yapmadığını: - partprobe / dev / sda (warnikg: Çekirdek yeniden okumak için başarısız)
Max

@Max, ayrıca bazen partprobun bile çalışmadığını bildiren bir hata çıktığını fark ettim. Bazen yeniden başlatma, kesin olan tek seçenektir. Çoğu zaman olsa benim için işe yarıyor gibi görünüyor.
Matt

Bu benim için işe yaramadı çünkü hala --bind ile bağlı bazı dizinler vardı. Bölmenin kendisi çoktan çıkarıldı ancak bu bölmeye işaret eden bağlanma bağları hala oradaydı. Tutaklığın işe yaraması garipti ve partprobe çalışmıyor, ancak bağlama-mount'ları da taktıktan sonra diski de partprobe edebilirim.
Ethan Leroy,

Bu benim için CentOS 6'da 10 dakika boyunca kpartxve udevadm triggerboyunca fgeleledikten sonra çalıştı . Teşekkür ederim!
Mike Andrews

19

Bölümleme tablosu bilgilerini yeniden okumak her zaman çalışmıyor, ancak deneyin

hdparm -z /dev/sda

veya

sfdisk -R /dev/sda

Çalışırsa / proc / partitions içindeki değerler değişecektir.


hdparm benim için çalıştı.
Prof. Falken

3
sfdisk -R seçeneği mevcut değil.
Matt

hdparmKomutun sadece bölümler monte edilmediğinde çalışacağına dikkat edilmelidir .

... gerçekten öyle görünüyor ki sfdisk -Rutil-linux 2.24.2 ve 2.26.1 arasında bir yere kaldırıldı
Charles Duffy

1
man sfdiskdiyor ki:Since version 2.26 sfdisk no longer provides the -R or --re-read option to force the kernel to reread the partition table. Use blockdev --rereadpt instead.
Tom Hale


8

Not: Lütfen düzenlediğim bölümlerden hiçbirinin açılmadığını, takılmadığını veya kullanımda olmadığını varsayalım.

Bu varsayım göz önüne alındığında, bölüm tablosu olabilir başarıyla yeniden taranır ve sorun ortaya çıkmayacak. Bu hatayı alıyorsanız, bölüm tablosunun şu anda kullanımda olması ve bu nedenle tutarsızlıklar oluşturmadan yeniden taranamaması nedeniyledir.


Bazı bölümler kullanımda olabilir, ancak hiçbiri aynı bölüm tablosunda olsalar bile, gerçekten değiştirdiğim bölümler değil.
Teddy

8
Çekirdek o kadar akıllı değil. Tablodaki herhangi bir bölüm kullanımdaysa, çekirdek yeniden taranmaz. Bunu yanlış yönde yapmak felaket olabilir, bu yüzden güvenli. İstenildiği zaman bölümleri ile etrafa doldurmak istiyorsanız, LVM kullanın.
womble

6

Düzenlemekte olduğunuz bölüme dayanmaz.

Sadece bir sabit diskin ( /dev/sda) ve iki bölümün ( /dev/sda1, /dev/sda2) olduğunu ve yalnızca bir bölüm ( /dev/sda1) eklediğinizi varsayalım . Başka bir bölümle ilgili olmayan bir şeyi silerseniz veya değiştirirseniz ( /dev/sda2) bölüm tablosunun yeniden okunmasının başarısız olduğunu ve çekirdeğin eski tabloyu kullandığını gösterir.

Ancak iki sabit diskiniz ( /dev/sda, /dev/sdb) varsa ve ( /dev/sdb) bölümlerinin hiçbiri kullanımda değildir. Ardından bölümleri ekleyebilir / silebilir / yeniden boyutlandırabilir / düzenleyebilirsiniz /dev/sdbve bunlar sorunsuz bir şekilde yeniden okunacaktır. Fakat değişiklik sırasında / dev / sdb'nin bir bölümü monte edilse bile. Sonra çekirdek eski masayı kullanmaya devam edecek.


5

Ben (asıl sorgulayıcı) birkaç gün önce, diğer cevapların hiçbiri ( partprobe /dev/sdXşu an kabul görmüş ve en yüksek oyu alan cevap dahil) hiçbiri çalışmadığında bir durum vardı. Ne işe yaradı , ancak şuydu:

blockdev --rereadpt /dev/sdX

(Bunun neden işe yaradığını ve diğerlerinin işe yaramadığını bilmiyorum, ancak meşgul bir sunucuda beni yeniden başlattığı için işe yaradığı için mutluyum.)


5

6,5 x 64'lük bir centodayım; çekirdek 2.6.32. ve yeniden boyutlandırmak için fdisk hilesini test ediyorum.

/dev/sda1 /boot
/dev/sda2 /

Tüm aşağıdaki komutlar vermedi değil çekirdek tekrar okuyun bölümü olun:

  • partprobe / dev / sda (uyarı: çekirdek yeniden okuyamadı ....)
  • hdparm -z / dev / sda (BLKRRPART başarısız oldu: cihaz veya kaynak meşgul)
  • blockdev -rereadpt / dev / sda (BLKRRPART başarısız oldu: cihaz veya kaynak meşgul)
  • sfdisk -R / dev / sda (BLKRRPART başarısız oldu: cihaz veya kaynak meşgul)

hala çalışması için yeniden başlatmaya ihtiyacım var


bunların hiçbiri benim için işe yaramadı (proxmox VM, centos 7, xfs bölümü, lvm). @uus yanıtı işe yaradı, ancak: serverfault.com/a/722386/102252
NotGaeL 18

Yukarıdaki komutların hepsi benim için de işe yaramadı.
Fadi Asbih

2.6.32 çekirdeğinin sorunu olduğunu düşünüyorum, bunları daha önce diğer makinelerde kullandım, daha eski bölümler arasında daha yüksek sayılar içeren bölümler eklerken bile gayet iyi çalıştı. yani sdb1 sdb2 sdb3 - sdb2'yi, ardından sdb1 sdb4 sdb5 sdb3'ü silin. Yukarıdakilere ek olarak, partx, kpartx, blockdev de işe yaramadı.
sdkks

Bir komutun bölümleri tekrar okutmaması, hepsinin başarısız olması olağandışı olduğunu sanmıyorum - bunun için bazı nedenlerin nasıl ortadan kaldırılacağı konusundaki cevabımı da inceleyiniz .
maxschlepzig

3

Tüm montaj noktalarının bağlantısı kaldırılmış durumdayken, Yocto 2.4:

partprobe /dev/sda 

Aygıtta bölümler silindikten sonra bölüm tablosunu yeniden yükleyemedi. Ayrıca denedim - ve başarısız oldu:

udevadm trigger --subsystem-match=block; udevadm settle
hdparm -z /dev/sda
blockdev --rereadpt /dev/sda

Tüm benzer "BLKRRPART başarısız oldu: cihaz veya kaynak meşgul ..." hatalarını yeniden başlatmamı söyleyen bildirildi. Önceden çalışan yöntemlerin bu başarısızlığı udev'in sistem kontrolü altında olmasından kaynaklanıyor mu? Ben denedim bu çizgiler boyunca düşünerek:

systemctl restart systemd-udevd.service

Birdenbire diskim tekrar açıldı, yeniden başlatmadan kullanılabilir!


En çok kabul edilen cevap eksik: Modern systemddünyada, BU doğru cevaptır. Lütfen bunlardan birini (veya her ikisini de) systemd-udev-settleve yeniden başlatmanız gerektiğini unutmayın systemd-udev-trigger. systemd-udevdTıpkı Camp'in dediği gibi yeniden başlamak benim için yeterli değildi. Ancak diğer ikisi de yeniden başlatılarak hile yapıldı!
Costin Gușă

1

Gibi bir komut blockdev --rereadpt /dev/sdXile başarısız olduğunda

blockdev: ioctl error on BLKRRPART: Device or resource busy

bu genellikle bazı (eski) bölümlerin hala çekirdek tarafından bir şekilde kullanıldığı anlamına gelir.

Muhtemel sebepler / düzeltmeler:

  1. bir sdX bölümü - say sdX1- hala monte edilmiş - kontrol edin mountve ekleyin
  2. /dev/sdX1bir yazılım saldırısının parçası - cat /proc/mdstatilgili dizileri kontrol et ve muhtemelen durdurmdadm --stop /dev/md126
  3. /dev/sdX1LVM fiziksel hacminin bir parçasıdır - pvdisplay/ ile kontrol edin vgdisplayve muhtemelen devre dışı bırakınvgchange
  4. /dev/sdX1yoluyla örneğin - bir aygıt haritalama bir parçasıdır cryptsetup- kontrol /dev/mapperve lsblkmuhtemelen eşleme kaldırma (örneğin cryptsetup luksClose)
  5. Bazı udev sondalarıyla yarış durumu - çalışan süreçleri kontrol edin psve birini öldürün

Bir aracı ise - ki blockdev --rereadptgenellikle benzer gibi olanları (başarısız partx -uv, kpartx, partprobe, kpartprobe) kök neden giderilinceye kadar benzer şekilde başarısız.


0

Ayrıca deneyebilirsiniz:

echo 1 > /sys/block/sdX/device/rescan

(Ama işe yaramayacak, aşağıdaki yorumu görün)


3
Bu bölüm tablosunu yeniden okumaz. Sadece geometri bilgilerini, önbellek modunu vb. Günceller. SCSI IDENTIFY_DRIVE yayınlanıyor.
Dmitri Chubarov

0

kpartx -a <partition> Sistemi yeniden başlatmak yerine, yeni oluşturulan bölümde iki kez çalıştırılabilir.


2
İki kere? Ayrıca “ sync; sync; sync” diye mi koşuyorsunuz ? ☺ Batıl inanç kokusu alıyorum…
Teddy

1
Bence bu batıl inanç, ikinci bir senkronizasyon yaparak senkronizasyonunuzu kontrol ettiğiniz gerçeğinden geldi. İkincisi ise sadece operatör için değerlidir, derhal devreye gireceğini doğrulamak, böylece ilk senkronizasyonun beklendiği gibi tamamlandığını gösterir. birkaç blog ve öğretici daha sonra, ve ....
JM Becker

0

Uudev servisinin çalıştığını kontrol etmeyi unutmayın. Bu, özellikle partprobe, hdparm, blockdev ve diğer çeşitli komutların hangi aygıt dosyalarının / dev / dizininde bulunduğunu farketmediği durumlarda faydalıdır.


0

Benim için partprobeya da blockdevçözüm işe yaramadı. Buna rağmen, bu bir işe yarıyor:

udevadm settle --exit-if-exists=/dev/sdb1

-3

Eğer 'man oracleasm-scandisks' için manpage okursanız, aşağıdaki metni not edersiniz. oracleasm, yaptığı tüm taramanın kaynağı olarak / proc / partitions kullanıyor. Bir scandisk yapmadan önce ham cihazlarınızı / proc / partitions içinde listelenmesi gerekir. Scanorder ve Scanexclude, / etc / sysconfig / oracleasm içine yerleştirdiğiniz parametreler / proc / partitions (!!!!) 'da bulunan adlarla ilgilidir.

---------- adam oracleasm-scandisks ------ ...

NASIL TARAMA HAPPENSİ Tarama dört temel aşamada ilerler.

   First, the list of disks to scan is created. If disks were specified on the command line, this is the list.
   If not, /proc/partitions is read, and each block device is added, subject to the -o and -x options.

   Second, the partition tables of each disk in the scan are reloaded unless the -s option was specified. Any
   disks that no longer exist are dropped.

   Third, the list of disks is recreated based on the new partition tables.

   Finally, each disk in the list is checked to see if it is marked for ASM use. Disks that are marked are
   instantiated.

2
... kullanımı hakkında hiçbir şeyden bahsetmedioracleasm-scandisks
voretaq7
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.