Làm cách nào để sử dụng bảng fdisk mới mà không cần khởi động lại (kpartx)?


11

Khi tôi chạy fdisk và thay đổi kích thước của phân vùng, fdisk nói ở cuối đầu ra của nó:

The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8)

Tôi muốn làm như vậy mà không phải khởi động lại (và sau đó viết một tập lệnh thực hiện nó) Làm cách nào để sử dụng kpartx để làm điều này một cách chính xác? Tôi đã thử:

kpartx -f -v /dev/mmcblk0

Đầu ra nào:

mmcblk0p1 : 0 102400 /dev/mmcblk0 2048
mmcblk0p2 : 0 7657472 /dev/mmcblk0 104448

và:

kpartx -a -v /dev/mmcblk0

đầu ra nào:

device-mapper: reload ioctl on mmcblk0p1 failed: Invalid argument
create/reload failed on mmcblk0p1
add map mmcblk0p1 (0:0): 0 102400 linear /dev/mmcblk0 2048
device-mapper: reload ioctl on mmcblk0p2 failed: Invalid argument
create/reload failed on mmcblk0p2
add map mmcblk0p2 (0:0): 0 7657472 linear /dev/mmcblk0 104448

Đây là một thẻ SD trong một debian chạy raspi.

EDIT: Để làm rõ những gì tôi đang cố gắng làm; Tôi đang xóa p3 chưa sử dụng khỏi Thẻ SD và thay đổi kích thước p2 để điền vào thẻ. Thẻ hiện chứa phân vùng khởi động nhỏ p1 và p2 là nơi HĐH nằm.


Thẻ SD hiện đang được sử dụng? (Ví dụ: nó có hệ thống tập tin được gắn trên nó không?)
derobert

@derobert, đúng vậy. nó có 2 phân vùng: phân vùng khởi động nhỏ và phân vùng chính lớn hơn, nơi phần lớn hệ điều hành nằm. Tôi chỉ đang cố gắng mở rộng phân vùng thứ 2 để điền vào thẻ.
Bạch tuộc

2
Tôi khá chắc chắn rằng đó là câu trả lời mà bạn không thể. Hạt nhân sẽ không đọc lại bảng phân vùng trừ khi thiết bị không được sử dụng ...
derobert

partprobegiúp được không?
Gilles 'SO- đừng trở nên xấu xa'

Câu trả lời:


7

Bạn muốn partx -u, không kpartx(hoạt động trên các thiết bị ánh xạ thiết bị).


Mục đích của -ucờ là gì?
IgorGanapolsky

1
@IgorGanapolsky, để cập nhật bảng phân vùng kernel để khớp với bảng trên đĩa. Một cách nhanh chóng man partxsẽ trả lời này.
psusi

@Octopus Điều này đã làm điều đó cho tôi, nơi partprobe không. Partprobe sau đó được trả lại mà không có lỗi đó.
Duncan X Simpson

6

Tôi tin rằng @derobert (người đã nhận xét về câu hỏi ban đầu) có khả năng đúng. Trong trường hợp fdisking một phân vùng hiện đang được sử dụng, có vẻ như không có lựa chọn nào khác ngoài khởi động lại.

Ngay cả khi tôi sử dụng partprobe(thu được với apt-get install parted) tôi vẫn nhận được kết quả sau:

Error: Partition(s) 2, 3 on /dev/mmcblk0 have been written, but we have 
been unable to inform the kernel of the change, probably because it/they 
are in use.  As a result, the old partition(s) will remain in use.  You 
should reboot now before making further changes.

Tôi đã làm điều tương tự, tin tốt là, tôi đã có thể ngắt kết nối, chạy partprobe <device> và kết nối lại cả hai phân vùng mà không cần khởi động lại. Thật không may, nó vẫn yêu cầu thời gian chết do ngừng dịch vụ.
Rahly

3
Các phiên bản gần đây hơn của parted/ partprobesẽ không gây ra lỗi như vậy và có thể được sử dụng trên phân vùng được gắn mà không cần khởi động lại.
psusi

@psusi, tôi đang sử dụng phiên bản gần đây partednhưng tôi vẫn gặp lỗi tương tự. Giải pháp là ngắt kết nối thiết bị trước khi chạy partedtrên thiết bị, sau đó bạn không phải khởi động lại hệ thống của mình để thông báo cho kernel sử dụng phân vùng mới thay vì phân vùng cũ
MyWrathAcademia

1

Tôi đã gặp vấn đề này vì tôi quên ngắt kết nối thiết bị. Sau một:

sudo umount /dev/sdb

fdisk hoạt động chính xác.


1
Tôi vẫn gặp lỗi: Gọi ioctl () để đọc lại bảng phân vùng. Đọc lại bảng phân vùng không thành công: Thiết bị hoặc tài nguyên bận rộn
IgorGanapolsky
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.