今天在将4T硬盘分区时遇到一个问题
Error: Partition(s) 1, 2, 3, 4 on /dev/hdiskA 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
翻译为:错误:已经写入/dev/hdiskA上的分区1、2、3、4,但是我们无法将更改通知内核,可能是因为它/它们正在使用。因此,旧的分区将继续使用。在进行进一步更改之前,现在应该重新启动。
重启之后就可以了。
问题复现如下:
1、我是将parted工具打包为库,然后使用.h的接口函数调用分区所需要的函数。单的使用没有问题,然后将它加入到主程序中进行按键触发分区线程。
2、偶尔出现以上错误,出现之后,继续触发2次之后还是不好用。我将主程序杀死,然后使用parted工具进行分区,仍然报上面的错误,并且多了一句
you may need to update /etc/fstab
这个不是问题网上的回答如下:
(1)不需要update。parted命令是实时生效的。分区命令完成后已经将分区表数据写入了硬盘。
(2)/etc/fstab文件,是系统的自动挂载分区的配置。目的是让系统重启后,能够自动将某个分区挂载到指定挂载点。而不用再手动mount
(3)这个文件的配置方法在老师的课里有讲解。请注意再看一看。思路是:
vim + /etc/fstab
定位到文件末尾后,添加自动挂载的参数。例如:/dev/sdb1 /mnt/imooc ext3 default 0 0
参数的含义与mount命令中的参数含义比较像,学一下老师前面讲解的mount命令用法后就大致明白了。
然后我将主程序启动,继续触发分区,就好使了。
3、最后将机器关掉,然后上电,触发分区,设备正常。
目前的总结就是,重启就好使。问题继续调查,应该是哪个地方占用了。
4、刚才又去尝试了一下,使用mount看看有没有被其他地方占用,发现的确没有。只有第一次能够格式化成功,后面就是失败了。然后我在格式化的过程中查看是否被别人挂载,发现还是没有。然后在主程序运行的时候使用parted工具进行分区,失败报了跟上面一样的错误。然后我将主程序杀死,使用parted工具分区,成功了。
结论:应该是被某个地方mount了。
问题终于找到了。
总结如下:
一般使用parted工具也好,使用库也好,进行分区操作主要使用mklabel和mkpart这两个函数。在格式化为gpt格式并分区之后,还需要进行文件系统格式化,一般格式化为FAT32或者NTFS格式。在进行文件系统格式化的时候,需要打开设备节点进行操作。问题就出在这里,open之后,操作完成,最后没有close,导致这一开始的错误!!!