parted 创建新分区似乎有一个不希望的副作用,如果该分区以前存在,它将自动挂载,甚至在它被格式化之前。
这对于一个脚本来说很麻烦,例如:
parted -sm /dev/sdb mklabel gpt
parted -sm /dev/sdb mkpart primary ext4 1 1.8T
mkfs.ext4 -L drive /dev/sdb1
mkfs 在这里失败,因为分区已挂载。
在 CentOS 7 中观察到此行为,当目标磁盘自上次启动以来已被格式化并挂载时。
卸载,删除和挂载点目录中的条目/etc/fstab
,仍然触发条件;将创建挂载点并自动挂载分区。
目前尚不清楚谁创建了挂载点目录或 parted 从哪里获取信息。
在 fstab 清除和 parted 调用之间重新启动将解决此问题。parted 中没有关于自动安装的记录参数。
那么这种行为对于 parted 来说是否正常,是否有可靠的方法来防止它自动安装?
经过一些彻底的测试,截至 2018 年 3 月,答案是parted无法阻止systemd在重新创建后自动重新挂载分区,除非事先在 /etc/fstab 中明确配置了 noauto。
解决方法
正如@AB 所暗示的那样,可以使用fdisk或gdisk等另一个工具代替parted在重新创建之前正确清除分区信息。唯一的缺点是这些工具使用交互式外壳,并且不是为脚本中的批处理而设计的。
交互模式
管道自动化
这不是超级干净或便携,但可以通过逐行管道用户输入来实现相同的结果。与交互模式一样,空行将接受 gdisk 提供的默认值,在这种情况下最大化分区使用并为 Linux 系统选择正确的类型。
SystemD 监控
在运行gdisk时,我们检查 dmesg 的挂载活动,并观察到只有几个设备信息请求:
所以使用这种方法,我们的自动化脚本可以安全地继续mkfs部分。