Czasami, podczas zmiany rozmiaru lub w inny sposób z partycjami na dysku, cfdisk powie:
Wrote partition table, but re-read table failed. Reboot to update table.
(Dzieje się tak również w przypadku innych narzędzi do partycjonowania, więc myślę, że jest to problem dotyczący Linuksa, a nie problem z dyskiem CD.) Dlaczego tak jest i dlaczego zdarza się to tylko czasami i co mogę zrobić, aby tego uniknąć?
Uwaga: Proszę założyć, że żadna z aktualnie edytowanych przeze mnie partycji nie jest otwarta, zamontowana lub używana w inny sposób.
Aktualizacja:
cfdisk używa, ioctl(fd, BLKRRPART, NULL)
aby powiedzieć Linuksowi, aby ponownie przeczytał tablicę partycji. Dwa inne zalecane do tej pory narzędzia ( hdparm -z
DEVICE
, sfdisk -R
DEVICE
) robią dokładnie to samo. Z partprobe
DEVICE
drugiej strony polecenie wydaje się używać nowego ioctl o nazwie BLKPG, co może być lepsze; Nie wiem (Powoduje także powrót do BLKRRPART, jeśli BLKPG zawiedzie.)
BLKPG wydaje się być operacją „ta partycja uległa zmianie; oto nowy rozmiar” i wyglądała, jakby była partprobe
nazywana indywidualnie na wszystkich partycjach przekazanego urządzenia, więc powinna działać, jeśli poszczególne partycje nie są używane. Nie miałem jednak okazji tego spróbować.
man sfdisk
mówi: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.
Odpowiedzi:
IMHO najbardziej wiarygodna / najlepsza odpowiedź to
źródło
kpartx
iudevadm trigger
do 10 minut. Dziękuję Ci!Ponowne odczytanie informacji o tablicy partycji nie zawsze działa, ale spróbuj
lub
Jeśli to zadziała, wartości w / proc / partitions zmienią się.
źródło
hdparm
polecenie będzie działać tylko wtedy, gdy partycje nie zostaną zamontowane.sfdisk -R
został usunięty gdzieś pomiędzy util-linux 2.24.2 i 2.26.1man sfdisk
mówi: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.
W Centos7:
Według https://access.redhat.com/solutions/199573
Powinieneś spróbować :
To zadziałało dla mnie.
źródło
Biorąc pod uwagę to założenie, tablicę partycji można pomyślnie przeskanować ponownie, a problem się nie pojawi. Jeśli pojawia się ten błąd, to dlatego, że tablica partycji jest obecnie w użyciu i dlatego nie można go ponownie przeskanować bez tworzenia niespójności.
źródło
Nie jest oparty na edytowanej partycji.
Załóżmy, że masz tylko jeden dysk twardy (
/dev/sda
) i dwie partycje (/dev/sda1
,/dev/sda2
) i zamontowałeś tylko jedną partycję (/dev/sda1
). Jeśli usuniesz lub zmienisz coś o innej partycji, która nawet nie jest zamontowana (/dev/sda2
), pojawi się błąd, że ponowne odczytanie tablicy partycji nie powiodło się, a jądro użyje starej tabeli.Ale jeśli masz dwa dyski twarde (
/dev/sda
,/dev/sdb
) i żadna z partycji (/dev/sdb
) nie jest używana. Następnie możesz dodać / usunąć / zmienić rozmiar / edytować partycje/dev/sdb
i zostaną one ponownie przeczytane bez żadnego problemu. Ale nawet jeśli jedna partycja / dev / sdb została zamontowana podczas zmiany. Wtedy jądro będzie nadal używać starej tabeli.źródło
Ja (pierwotny pytający) miałem kilka dni temu sytuację, w której żadna z pozostałych odpowiedzi (w tym
partprobe /dev/sdX
obecnie zaakceptowana i najlepiej głosowana) nie zadziałała. Co zrobił pracę, jednak było to:(Nie wiem, dlaczego to zadziałało, a inne nie, ale cieszę się, że zadziałało, ponieważ uratowało mi ponowne uruchomienie na zajętym serwerze).
źródło
korzystam z centos 6,5 x 64; jądro 2.6.32. i testuję sztuczkę fdisk, aby zmienić rozmiar.
Wszystkie następujące polecenia nie spowodowały ponownego odczytu partycji jądra:
wciąż potrzebuję restartu, aby działał
źródło
Po odłączeniu wszystkich punktów montowania, uruchomiony Yocto 2.4:
Nadal nie udało się ponownie załadować tabeli partycji po usunięciu partycji na urządzeniu. Również wypróbowane - i nie powiodły się:
Wszystkie zgłaszały podobne błędy „BLKRRPART nie powiodło się: urządzenie lub zasób zajęte ...” instruuje mnie do ponownego uruchomienia. Czy to niepowodzenie wcześniej działających metod może wynikać z faktu, że udev jest teraz pod kontrolą systemową? Myśląc w ten sposób, próbowałem:
I nagle mój dysk jest znów dostępny, bez ponownego uruchamiania!
źródło
systemd
świecie TO jest poprawna odpowiedź. Pamiętaj, że musisz także ponownie uruchomić jeden z nich (lub oba)systemd-udev-settle
isystemd-udev-trigger
. Ponowne uruchomienie, taksystemd-udevd
jak powiedział Camp, nie wystarczyło mi. Ale zrestartowanie również dwóch pozostałych załatwiło sprawę!Gdy polecenie takie jak
blockdev --rereadpt /dev/sdX
nie powiedzie się zzwykle oznacza to, że jakaś (stara) partycja jest nadal w jakiś sposób używana przez jądro.
Możliwe przyczyny / poprawki:
sdX1
- jest nadal zamontowana - sprawdź jąmount
i zamontuj/dev/sdX1
jest częścią nalotu na oprogramowanie - sprawdźcat /proc/mdstat
i ewentualnie zatrzymaj odpowiednie tablice, npmdadm --stop /dev/md126
/dev/sdX1
jest częścią woluminu fizycznego LVM - sprawdź za pomocąpvdisplay
/vgdisplay
i ewentualnie dezaktywuj za pomocąvgchange
/dev/sdX1
są częścią pewnych mapowania urządzenia - na przykład za pomocącryptsetup
- sprawdzenia/dev/mapper
ilsblk
i ewentualnie usunąć mapowanie (na przykładcryptsetup luksClose
)ps
i prawdopodobnie zabij jedenJeśli jedno narzędzie - powiedzieć
blockdev --rereadpt
nie tacy jak zwykle w podobnych (partx -uv
,kpartx
,partprobe
,kpartprobe
) nie w podobny sposób aż przyczyną jest wyeliminowane.źródło
Możesz także spróbować:
(Ale nie będzie działać, patrz komentarz poniżej)
źródło
kpartx -a <partition>
można uruchomić dwa razy na nowo utworzonej partycji .... zamiast ponownego uruchamiania systemu.źródło
sync; sync; sync
”? Smell Czuję przesąd…Pamiętaj, aby sprawdzić, czy usługa udev działa. Jest to szczególnie przydatne, gdy partprobe, hdparm, blockdev i różne inne polecenia nie wydają się mieć znaczenia, jakie pliki urządzeń są dostępne w katalogu / dev /.
źródło
Dla mnie ani
partprobe
czyblockdev
rozwiązanie działało. Chociaż ten działa:źródło
Jeśli przeczytasz stronę podręczną „man oracleasm-scandisks”, zwrócisz uwagę na poniższy tekst. oracleasm używa / proc / partitions jako źródła całego wykonywanego skanowania. Musisz umieścić swoje surowe urządzenia na liście w / proc / partitions, zanim będziesz mógł zrobić skandisk. Parametry Scanorder i Scanexclude, które umieszczasz w / etc / sysconfig / oracleasm, odnoszą się do nazw znalezionych w / proc / partitions (!!!!).
---------- człowiek, skandiski z oracleasm ------ ...
JAK DZIAŁA SKANOWANIE Skanowanie przebiega w czterech podstawowych etapach.
źródło
oracleasm-scandisks