我想使用该yes
命令,以便 GNU parted 不等待用户输入:
root@195-xxx-xxx-xxx:/proc# parted /dev/sda unit B resizepart 2 1166016512B
Warning: Shrinking a partition can cause data loss, are you sure you want
to continue?
Yes/No? y
Information: You may need to update /etc/fstab.
root@195-xxx-xxx-xxx:/proc# echo $?
0
然而,使用yes
在这里不起作用:
root@195-xxx-xxx-xxx:/proc# yes | parted /dev/sda unit B resizepart 2 166016512B
Warning: Shrinking a partition can cause data loss, are you sure you
want to continue?
root@195-xxx-xxx-xxx:/proc# echo $?
1
编辑:
该--script
选项也不起作用:
root@195-xxx-xxx-xxx:/proc# parted --script /dev/sda unit B resizepart 2 1166016512B
Warning: Shrinking a partition can cause data loss, are you sure you
want to continue?
root@195-xxx-xxx-xxx:/proc# echo $?
1
答案1
就我而言,我在无 tty 的 SSH 会话中使用 Parted 3.2。 “Yes”命令 hack 不起作用,因为分开的代码有以下测试:
/* script-mode: don't handle the exception */
if (opt_script_mode || (!isatty (0) && !pretend_input_tty))
return PED_EXCEPTION_UNHANDLED;
请注意“isatty”测试,该测试将会失败。 “pretend_input_tty”是一个未记录的命令行选项,可以通过 ---pretend-input-tty 打开。
因此,如果您想使用脚本中的parted,我的答案如下:
/sbin/parted -a optimal /dev/loop1 ---pretend-input-tty resizepart 4 Yes 522239s
如果这不起作用,请尝试移至Yes
末尾:
/sbin/parted -a optimal /dev/loop1 ---pretend-input-tty resizepart 4 522239s Yes
笔记假装输入 tty 前面的三个破折号。我想这应该能吓跑我们。但不确定。
答案2
如果resizepart
不起作用,您可能不得不诉诸rm
并mkpart
实现同样的目标。
当然,这需要您首先解析分区表以确定分区类型和起始偏移量。除非您已经知道必要的值。毕竟你166016512B
也必须从某个地方获取。
parted
可以--machine
选择生成易于解析的输出。另一方面,实际解析它的例子并不容易找到。 ;)
答案3
可以使用以下命令来使用 GNU parted 调整大小:
echo yes | parted /dev/sda ---pretend-input-tty resizepart 2 100GB
答案4
该脚本对分开版本的变化有点脆弱,但对我来说很有效,并且如果按照@frostschutz的建议重建分区表因调整扩展/多个分区的大小而变得复杂,则特别有用:
脚本
#!/bin/bash
echo "Resizing partition ${2} on ${1} with new end ${3}"
parted "${1}" ---pretend-input-tty <<EOF
resizepart
${2}
${3}
Yes
quit
EOF
echo "Done"
使用示例:
sudo ./resize_partition.sh /dev/loop0 2 15757970s
注意我使用的是扇区中指定的分区端点,因此s
.