加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 如何编写sfdisk脚本或为多个分区分开?

发布时间:2020-12-16 01:07:21 所属栏目:安全 来源:网络整理
导读:出于QA目的,我需要能够通过bash脚本对驱动器进行分区,最多可以为RHEL和SLES分区30个或更多分区. 我曾尝试在BASH中使用fdisk通过“here document”进行此操作,但是您可以通过各种步骤进行猜测.我认为这是因为输入命令的时间发生在错误的时间并且不同步.十分之
出于QA目的,我需要能够通过bash脚本对驱动器进行分区,最多可以为RHEL和SLES分区30个或更多分区.

我曾尝试在BASH中使用fdisk通过“here document”进行此操作,但是您可以通过各种步骤进行猜测.我认为这是因为输入命令的时间发生在错误的时间并且不同步.十分之一的我的脚本将正常工作.

我看过parted和sfdisk,并不真正了解如何使用这些工具.

我只使用过fdisk.

我的问题是,使用fdisk你可以反复声明类似“新分区1gb”的内容,这对我有用,因为在我的脚本中我不需要跟踪先前的分区或剩余空间或进行任何计算.每次运行此函数时,这只会从任何未使用的空间中创建一个额外的1gb分区.

有没有办法使用parted或sfdisk(或任何其他已经成为这些发行版的一部分的工具),以便我可以编写从1到x操作的循环脚本,而不必对剩余空间进行这种计算?有没有人有他们可以分享的任何例子?

更新

这是我的一个功能的例子.在脚本开始时,我们询问用户要创建的分区数量,它们的大小(这对所有人来说都是静态的),以及FS的类型(如果有的话).此函数创建分区1至3,然后另一个函数处理扩展(第4),另一个处理第5到nn.

正如我之前所说,这个脚本功能齐全;我的问题是,有时发送到fdisk的命令似乎到达了错误的时间,然后打破了整个脚本,从而破坏了任何自动化.

所以这些命令是这样发送的:

n
p
1

+1M
w

我一直在阅读fdisk,并且已经知道它不适合脚本编写,所以我看到的是,在脚本模式下,fdisk可能会要求我的脚本已经认为是时候发送1了.

fdisk对我有用的是,在你指定了分区号后,它已经计算了下一个免费扇区,所以我此时要做的就是为我的开始发送一个空行,然后为我的总大小发送1M. Parted和sfdisk看起来并没有像我所说的那样工作,我现在仍然很陌生,以了解如何在这个时候自动化这些工具.

Create1to3Primary_Func() {
    Size=+$partSizeMB
    for i in {1..3}
    do
        echo " this loop i= $i"
        echo "Creating Partition $i on $targetFull as $targetFull$i using Create1to3Primary_Func()"
        rm -f /tmp/myScript
        echo -e "n" >> /tmp/myScript
        echo -e "p" >> /tmp/myScript
        echo -e "$i" >> /tmp/myScript
        echo -e " " >> /tmp/myScript
        echo -e "$Size" >> /tmp/myScript
        echo -e "w" >> /tmp/myScript
        echo -e "EOF" >> /tmp/myScript
        fdisk $targetFull < /tmp/myScript
        echo "  sleeping Create1to3Primary_Func()"
        sleep 4s
        if [ "$RawOrFs" == "f" ]; then
            mkfsCMD="mkfs.$fsType"
            mkfsFullTarget="$targetFull$i"
            cmdline="$mkfsCMD $mkfsFullTarget -L  'Partition$i'"
            echo "Creating $fsType File System on $mkfsFullTarget"
            $cmdline
        fi
        void="/mnt/mymnt$i"
        if [ ! -d $void ] ; then
            echo "Creating Mount Point /mnt/mymnt$i"
            void="/mnt/mymnt$i"
            mkdir $void
        fi
        echo "Part Probe on  $targetFull "
        partprobe $targetFull ; sleep 4s
    done
}
不确定得到你真正想要的东西,但你可能对sfdisk可以转储分区布局并使用这种布局来分区其他磁盘这一事实感兴趣.例如:
sfdisk -d /dev/sda > mydiskpartitionslayout

然后在你的脚本(照顾当然)你可以指定

sfdisk /dev/sdx < mydiskpartitionslayout

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读