pengembangan-web-mp-pd.com

Baca ulang tabel partisi tanpa me-reboot?

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 menggunakan ioctl(fd, BLKRRPART, NULL) untuk memberitahu Linux untuk membaca ulang tabel partisi. Dua alat lain yang direkomendasikan sejauh ini (hdparm -zDEVICE, sfdisk -RDEVICE) tidak hal yang persis sama. Perintah partprobeDEVICE, 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 itu tampak seperti partprobe menyebutnya secara individual pada semua partisi pada perangkat yang dilewati, jadi ini akan berfungsi jika partisi individual tersebut tidak digunakan. Namun, saya belum berkesempatan mencobanya.

71
Teddy

IMHO jawaban yang paling dapat diandalkan/terbaik adalah

partprobe /dev/sdX
68
knweiss

Membaca ulang informasi tabel partisi tidak selalu berhasil, tetapi cobalah

hdparm -z /dev/sda

atau

sfdisk -R /dev/sda

Jika berfungsi nilai-nilai di/proc/partisi akan berubah.

19
ko-dos

Pada Centos7:

Menurut https://access.redhat.com/solutions/19957

Kamu harus mencobanya :

partx -u <partition>

Ini berhasil untuk saya.

10
uus

Catatan: Harap asumsikan bahwa tidak ada partisi yang sedang saya edit yang dibuka, dipasang atau digunakan.

Dengan asumsi itu, tabel partisi dapat berhasil dipindah-pindahkan, dan masalah tidak akan muncul. Jika Anda mendapatkan kesalahan itu, itu karena tabel partisi is sedang digunakan, dan karenanya tidak dapat dipindai ulang tanpa membuat ketidakkonsistenan.

8
womble

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 (/dev/sdb) sedang 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.

6

Saya (si penanya asli) punya situasi beberapa hari yang lalu ketika tidak ada jawaban lain (termasuk partprobe /dev/sdX, saat ini jawaban yang diterima dan pilihan tertinggi) berfungsi. Apa yang berhasil bekerja, adalah:

blockdev --rereadpt /dev/sdX

(Saya tidak tahu mengapa ini berhasil dan yang lain tidak, tapi saya senang itu berhasil, karena menyelamatkan saya dari reboot pada server yang sibuk.)

5
Teddy

saya menggunakan centos 6.5 x64; kernel 2.6.32. dan saya sedang menguji trik fdisk untuk mengubah ukuran.

/dev/sda1 /boot
/dev/sda2 /

Semua perintah berikut tidak tidak membuat partisi ulang kernel:

  • partprobe/dev/sda (peringatan: kernel gagal membaca ulang ....)
  • hdparm -z/dev/sda (BLKRRPART gagal: perangkat atau sumber daya sibuk)
  • blockdev -rereadpt/dev/sda (BLKRRPART gagal: perangkat atau sumber daya sibuk)
  • sfdisk -R/dev/sda (BLKRRPART gagal: perangkat atau sumber daya sibuk)

saya masih membutuhkan reboot untuk membuatnya berfungsi

5
Max

Dengan semua mount poin dilepas, jalankan Yocto 2.4:

partprobe /dev/sda 

Masih gagal memuat ulang tabel partisi setelah partisi dihapus pada perangkat. Juga mencoba - dan gagal adalah:

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

Semua yang dilaporkan serupa "BLKRRPART gagal: kesalahan perangkat atau sumber daya ..." menginstruksikan saya untuk reboot. Apakah kegagalan metode yang sebelumnya berfungsi mungkin karena fakta bahwa udev sekarang di bawah kendali systemd? Berpikir seperti itu saya mencoba:

systemctl restart systemd-udevd.service

Dan tiba-tiba disk saya tersedia lagi, tanpa reboot!

3

Anda juga dapat mencoba:

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

(Tetapi tidak akan berhasil, lihat komentar di bawah)

1
bogdano

Ketika perintah seperti blockdev --rereadpt /dev/sdX gagal dengan

blockdev: ioctl error on BLKRRPART: Device or resource busy

ini biasanya berarti bahwa beberapa partisi (lama) memang masih digunakan oleh kernel.

Kemungkinan penyebab/perbaikan:

  1. partisi sdX - say sdX1 - masih terpasang - periksa mount dan umount
  2. /dev/sdX1 adalah bagian dari serangan perangkat lunak - centang cat /proc/mdstat dan mungkin menghentikan array yang relevan, mis. mdadm --stop /dev/md126
  3. /dev/sdX1 adalah bagian dari volume fisik LVM - tanyakan pvdisplay/vgdisplay dan mungkin nonaktifkan dengan vgchange
  4. /dev/sdX1 adalah bagian dari beberapa pemetaan perangkat - mis. via cryptsetup - periksa /dev/mapper dan lsblk dan mungkin menghapus pemetaan (mis. cryptsetup luksClose)
  5. Kondisi balap dengan beberapa pemeriksaan udev - periksa proses yang berjalan dengan ps dan mungkin bunuh satu

Jika satu alat - katakan blockdev --rereadpt gagal biasanya yang serupa seperti (partx -uv, kpartx, partprobe, kpartprobe) gagal dengan cara yang sama sampai akar penyebabnya dihilangkan.

1
maxschlepzig

kpartx -a <partition> dapat dijalankan dua kali pada partisi yang baru dibuat .... alih-alih me-reboot sistem.

0
Kailas Kadam

Bagi saya solusi partprobe atau blockdev tidak bekerja. Meskipun, yang ini berfungsi:

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

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 /.

0
kerolasa