Terkadang, ketika mengubah ukuran atau mucking dengan partisi pada disk, cfdisk akan mengatakan:
Wrote partition table, but re-read table failed. Reboot to update table.
(Ini juga terjadi dengan alat partisi lain, jadi saya pikir ini adalah masalah Linux daripada masalah cfdisk.) Mengapa ini, dan mengapa itu hanya terjadi kadang-kadang , dan apa yang bisa saya lakukan untuk menghindarinya?
Catatan: Harap asumsikan bahwa tidak ada partisi yang sedang saya edit yang dibuka, dipasang atau digunakan.
Memperbarui:
cfdisk digunakan ioctl(fd, BLKRRPART, NULL)
untuk memberitahu Linux untuk membaca ulang tabel partisi. Dua alat lain yang direkomendasikan sejauh ini ( hdparm -z
DEVICE
, sfdisk -R
DEVICE
) melakukan hal yang persis sama. The partprobe
DEVICE
perintah, di sisi lain, tampaknya menggunakan ioctl baru yang disebut BLKPG, yang mungkin lebih baik; Saya tidak tahu (Itu juga jatuh kembali pada BLKRRPART jika BLKPG gagal.)
BLKPG tampaknya menjadi operasi "partisi ini telah berubah; ini adalah ukuran baru", dan sepertinya partprobe
disebut secara individual pada semua partisi pada perangkat yang dilewati, jadi itu akan berfungsi jika partisi individual tidak digunakan. Namun, saya belum berkesempatan mencobanya.
man sfdisk
mengatakan: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.
Jawaban:
IMHO jawaban yang paling dapat diandalkan / terbaik adalah
sumber
kpartx
danudevadm trigger
selama 10 menit. Terima kasih!Membaca ulang informasi tabel partisi tidak selalu berhasil, tetapi cobalah
atau
Jika berfungsi, nilai-nilai di / proc / partisi akan berubah.
sumber
hdparm
perintah hanya akan berfungsi jika partisi tidak di-mount.sfdisk -R
dihapus di suatu tempat antara util-linux 2.24.2 dan 2.26.1man sfdisk
mengatakan: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.
Di Centos7:
Menurut https://access.redhat.com/solutions/199573
Kamu harus mencobanya :
Itu berhasil untuk saya.
sumber
Dengan asumsi itu, tabel partisi dapat berhasil di-scan ulang, dan masalah tidak akan muncul. Jika Anda mendapatkan kesalahan itu, itu karena tabel partisi saat ini sedang digunakan, dan karenanya tidak dapat dipindai ulang tanpa membuat ketidakkonsistenan.
sumber
Itu tidak didasarkan pada partisi yang sedang Anda edit.
Misalkan Anda hanya memiliki satu harddisk (
/dev/sda
) dan dua partisi (/dev/sda1
,/dev/sda2
) dan Anda telah memasang hanya satu partisi (/dev/sda1
). Jika Anda menghapus atau mengubah sesuatu tentang partisi lain yang bahkan tidak di-mount (/dev/sda2
) Anda akan mendapatkan kesalahan karena pembacaan ulang tabel partisi gagal dan kernel akan menggunakan tabel lama.Tetapi jika Anda memiliki dua harddisk (
/dev/sda
,/dev/sdb
) dan tidak ada partisi dari (/dev/sdb
) yang digunakan. Kemudian Anda dapat menambah / menghapus / mengubah ukuran / mengedit partisi/dev/sdb
dan mereka akan dibaca kembali tanpa masalah. Tetapi bahkan jika satu partisi / dev / sdb dipasang selama perubahan. Kemudian kernel akan tetap menggunakan tabel lama.sumber
Saya (si penanya asli) memiliki situasi beberapa hari yang lalu ketika tidak ada jawaban lain (termasuk
partprobe /dev/sdX
, saat ini jawaban yang diterima dan yang dipilih dengan suara tertinggi) bekerja. Apa yang melakukan pekerjaan, bagaimanapun, adalah ini:(Saya tidak tahu mengapa ini berhasil dan yang lain tidak, tapi saya senang itu berhasil, karena menyelamatkan saya dari reboot pada server yang sibuk.)
sumber
Saya menggunakan centos 6.5 x64; kernel 2.6.32. dan saya sedang menguji trik fdisk untuk mengubah ukuran.
Semua perintah berikut ini tidak membuat partisi ulang kernel:
saya masih membutuhkan reboot untuk membuatnya berfungsi
sumber
Dengan semua mount poin dilepas, jalankan Yocto 2.4:
Masih gagal memuat ulang tabel partisi setelah partisi dihapus pada perangkat. Juga mencoba - dan gagal adalah:
Semua yang dilaporkan serupa "BLKRRPART gagal: kesalahan perangkat atau sumber daya ..." menginstruksikan saya untuk reboot. Apakah kegagalan metode yang sebelumnya berfungsi ini mungkin disebabkan oleh fakta bahwa udev sekarang berada di bawah kendali systemd? Berpikir seperti itu saya mencoba:
Dan tiba-tiba disk saya tersedia lagi, tanpa reboot!
sumber
systemd
dunia modern , INI adalah jawaban yang benar. Harap perhatikan bahwa Anda juga harus memulai ulang salah satu (atau keduanya)systemd-udev-settle
dansystemd-udev-trigger
. Memulai kembalisystemd-udevd
seperti yang Camp katakan tidak cukup untukku. Tetapi memulai kembali juga dua lainnya berhasil!Ketika perintah suka
blockdev --rereadpt /dev/sdX
gagal denganini biasanya berarti bahwa beberapa partisi (lama) memang masih digunakan oleh kernel.
Kemungkinan penyebab / perbaikan:
sdX1
- masih terpasang - periksamount
dan umount/dev/sdX1
merupakan bagian dari serangan perangkat lunak - periksacat /proc/mdstat
dan mungkin hentikan array yang relevan, mismdadm --stop /dev/md126
/dev/sdX1
adalah bagian dari volume fisik LVM - periksa denganpvdisplay
/vgdisplay
dan mungkin nonaktifkan denganvgchange
/dev/sdX1
adalah bagian dari beberapa pemetaan perangkat - misalnya viacryptsetup
- centang/dev/mapper
danlsblk
dan mungkin menghapus pemetaan (misalnyacryptsetup luksClose
)ps
dan mungkin bunuh satuJika salah satu alat - mengatakan
blockdev --rereadpt
gagal yang biasanya mirip seperti (partx -uv
,kpartx
,partprobe
,kpartprobe
) gagal dengan cara yang sama sampai akar penyebab dihilangkan.sumber
Anda juga dapat mencoba:
(Tetapi tidak akan berhasil, lihat komentar di bawah)
sumber
kpartx -a <partition>
dapat dijalankan dua kali pada partisi yang baru dibuat .... bukannya me-reboot sistem.sumber
sync; sync; sync
"? ☺ Aku mencium takhayul ...Ingatlah untuk memeriksa layanan udev sedang berjalan. Ini sangat berguna ketika partprobe, hdparm, blockdev, dan berbagai perintah lain tampaknya tidak membuat perbedaan apa pun file perangkat yang tersedia di direktori / dev /.
sumber
Bagi saya tidak ada solusi
partprobe
ataublockdev
bekerja. Meskipun, yang ini berfungsi:sumber
Jika Anda membaca halaman manual untuk 'man oracleasm-scandisks' Anda akan mencatat teks di bawah ini. oracleasm menggunakan / proc / partisi sebagai sumber dari semua pemindaian yang dilakukannya. Anda harus mendapatkan perangkat mentah Anda terdaftar di / proc / partisi sebelum Anda dapat melakukan scandisk. Parameter Scanorder dan Scanexclude yang Anda tempatkan di / etc / sysconfig / oracleasm berhubungan dengan nama-nama yang ditemukan di / proc / partisi (!!!!).
---------- lelaki oracleasm-scandisks ------ ...
BAGAIMANA SCANNING HAPPENS Scan berlangsung dalam empat tahap dasar.
sumber
oracleasm-scandisks