如何不重新启动(kpartx)使用新的fdisk表?


11

当我运行fdisk并更改分区的大小时,fdisk在其输出末尾说:

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

我想这样做而不必重新引导(然后编写一个脚本来执行此操作)如何使用kpartx正确执行此操作?我试过了:

kpartx -f -v /dev/mmcblk0

哪个输出:

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

和:

kpartx -a -v /dev/mmcblk0

输出:

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

这是用于运行debian的raspi中的SD卡的。

编辑:澄清我要做什么;我正在从SD卡中删除未使用的p3,并调整p2的大小以填充卡。该卡当前包含一个小的引导分区p1,操作系统位于其中。


SD卡当前正在使用吗?(例如,它上面有已挂载的文件系统吗?)
derobert 2014年

@derobert,是的。它有2个分区:一个小的引导分区和一个较大的主分区,大部分操作系统都位于该分区中。我只是想扩展第二个分区以填充卡。
章鱼

2
我很确定这就是答案,你不能。除非不使用设备,否则内核不会重新读取分区表...
derobert 2014年

Answers:


7

你想partx -u,不是kpartx(其操作上的设备映射器设备)。


-u标志的目的是什么?
IgorGanapolsky '16

1
@IgorGanapolsky,更新内核分区表以匹配磁盘上的磁盘。快速man partx就会回答这个问题。
psusi

@Octopus这为我做到了,partprobe却没有。然后,零件探针返回而没有该错误。
邓肯X辛普森

6

我相信@derobert(对原始问题发表评论的人)可能是正确的。如果对当前正在使用的分区进行fdisk分区,则似乎除了重新引导外没有其他选择。

即使使用partprobe(通过获取apt-get install parted),我也会得到以下输出:

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.

我做了同样的事情,好消息是,我能够卸载,运行partprobe <device>并重新安装两个分区而无需重新启动。不幸的是,由于关闭服务,它仍然需要停机。
2014年

3
更近的版本parted/ partprobe不会给这样的错误,并且可以被用于在一个挂载的分区不需要重新启动。
psusi

@psusi,我使用的是最新版本,parted但仍然遇到相同的错误。解决方案是在设备上运行之前先卸载parted设备,然后不必重启系统即可通知内核使用新分区而不是旧分区
MyWrathAcademia '19

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.