postinstall中用parted划分分区的问题

做过kickstart/cobbler的同学应该都知道postinstall,它是用来在自动化安装操作系统时执行的脚本,比如配置ip,分区,格式化硬盘,安装包等。

下面讲讲我在写postinstall时遇到的一些关于硬盘分区的问题。

废话不多说,先贴上处理硬盘的脚本,这里只是处理非系统盘的其他硬盘。

echo "Dealing with internal disks now..."

NUM=01

for DEVICE in `lsscsi | awk ‘$2=/disk/ && $NF ~ /dev/ {print $NF}‘`; do

FSTYPE=""

LABEL=""

echo "Checking filesystem type and label on ${DEVICE}1..."

FSTYPE=`parted -s ${DEVICE}1 print 2>&1 | awk ‘/^ / {print $5}‘`

# Let‘s make sure this is NOT a swap partition, which wouldn‘t have a label

echo $FSTYPE | grep swap > /dev/null

if [ $? -eq 0 ]; then

echo "Partition ${DEVICE}1 is a SWAP, skipping..."

continue

fi

# Don‘t do anything if LABEL is "/"

if [ "$LABEL" = "/" ]; then

echo "Device ${DEVICE}1 either has or root label ‘/‘, skipping..."

continue

fi

LABEL=`e2label ${DEVICE}1`

if [ -z "$LABEL" -a -z "$FSTYPE" ]; then

echo "No filesystem and no label found on $DEVICE..."

LABEL=/hadoop$NUM

FSTYPE=ext4

# parted create gpt label

parted -s $DEVICE mklabel gpt

TOTAL=`parted -s $DEVICE unit mb print free 2>&1 | awk ‘/Free Space/ {print $3}‘ | awk -FMB ‘{print $1}‘`

echo "Creating new partition on $DEVICE with label $LABEL..."

parted -s $DEVICE mkpart primary $FSTYPE 0 $TOTAL 2>&1

if [ $? -eq 0 ]; then

NUM=`expr $NUM + 1 | awk ‘{printf("%02s",$1)}‘`

echo "Formatting filesystem ${DEVICE}1..."

sleep 3

mkfs.$FSTYPE -q -N 61050880 -L $LABEL -m 1 -O sparse_super ${DEVICE}1 2>&1  &

NEW_FS="${DEVICE}1 $NEW_FS"

else

echo "Failed to create new partition on $DEVICE! Skipping it..."

continue

fi

fi

echo "Adding entry for $LABEL into /etc/fstab..."

grep -w "LABEL=$LABEL $LABEL" /etc/fstab > /dev/null

if [ $? -eq 0 ]; then

perl -pi -e "s|LABEL=$LABEL $LABEL .*$|LABEL=$LABEL $LABEL $FSTYPE defaults,noatime,nodiratime 0 0|" /etc/fstab 2>&1

else

echo "LABEL=$LABEL $LABEL $FSTYPE defaults,noatime,nodiratime 0 0" >> /etc/fstab

fi

# Create a mount point

if [ ! -d $LABEL ]; then

echo "Creating mount point $LABEL..."

mkdir -p $LABEL

fi

done

echo "Waiting for all mkfs processes to finish (if any)..."

wait

if [ -n "$NEW_FS" ]; then

echo "Tuning newly formatted filesystems..."

FS=""

for FS in $NEW_FS; do

tune2fs -i 0 -c 0 $FS 2>&1

done

fi

我着重说说

parted -s $DEVICE mkpart primary $FSTYPE 0 $TOTAL 2>&1

代表在DEVICE上创建分区,分区的跨度是从0开始到TOTAL结束,单位默认是MB,也可以用其他写法,比如百分比的方式:

parted -s $DEVICE mkpart primary $FSTYPE 0% 100% 2>&1

或者采用扇区的方式,如下命令表示起始扇区是34sectors

parted -s $DEVICE mkpart primary $FSTYPE 34s 100% 2>&1

但通过测试发现,第二种写法在安装操作系统的过程中会出现各种问题,比如某些硬盘在这条命令的执行时间太长或不能正确执行,导致mkfs命令不能正确的执行格式化硬盘操作。

报错信息如下:

filesystem and no label found on/dev/sdi...

Creating new partition on /dev/sdiwith label /hadoop08...

Formatting filesystem /dev/sdi1...

Adding entry for /hadoop08 into/etc/fstab...

Could not stat/dev/sdi1 --- No such file or directory

 

The deviceapparently does not exist; did you specify it correctly?

通常你会在日志中看到如下信息

Warning: The resulting partition is not properly aligned for best performance.

你不用担心硬盘性能会受到影响,大部分硬盘的logical size 和physical size都是512B,有些硬盘的physical size是4KB,对于这种硬盘就需要在划分分区的时候注意下,分区起始要是1MB,parted工具会帮你处理这些的,所以不用担心,不放心的话,可以用下面介绍的命令查看下分区情况。

附,硬盘操作相关的一些命令

显示硬盘/dev/sdb的分区情况

parted /dev/sdb print free 2>&1

parted /dev/sdb unit mb print free 2>&1

删除分区/dev/sdb1

parted /dev/sdb rm 1

创建gpt表

parted -s /dev/sdb mklabel gpt

格式化分区/dev/sdb1

mkfs.ext4 -q -N 61050880 -L /hadoop01 -m 1 -O sparse_super /dev/sdb1 2>&1

IO-limit相关的文章链接

http://people.redhat.com/msnitzer/docs/io-limits.txt

时间: 2024-09-29 04:40:51

postinstall中用parted划分分区的问题的相关文章

使用parted划分大容量磁盘

parted命令可以划分单个分区大于2T的GPT格式的分区,也可以划分普通的MBR分区,fdisk命令对于大于2T的分区无法划分,所以用fdisk无法看到parted划分的GPT格式的分区. Parted 命令分为两种模式:命令行模式和交互模式. 1.命令行模式: parted [option] device [command] ,该模式可以直接在命令行下对磁盘进行分区操作,比较适合编程应用. 2.交互模式:parted [option] device 类似于使用fdisk /dev/xxx M

centos8平台使用parted管理分区

一,parted的用途 parted是GNU发布的强大的分区工具, parted命令可以划分单个分区大于2T的GPT格式的分区,也可以划分普通的MBR分区. 因为fdisk命令对于大于2T的分区无法划分,所以用fdisk无法看到parted划分的GPT格式的分区 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest 对应的源码可以访问这里获取: https://github.com/liuhongdi/ 说明:作者:刘宏

linux使用parted进行分区

在linux系统中对大于2T的硬盘,使用fdisk进行分区,不是很好用,我们应该使用parted进行分区 一.查看系统中待分区的硬盘信息 [[email protected] ~]# fdisk -l Disk /dev/sda: 214.7 GB, 214748364800 bytes 255 heads, 63 sectors/track, 26108 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size

centos下fdisk和parted磁盘分区实战

需求:添加一块100M的硬盘并把它永久挂载到/data01上,写出详细的操作步骤 方法一: [root@localhost ~]# fdisk -l |grep 'sdb' Disk /dev/sdb: 106 MB, 106954752 bytes [root@localhost ~]# fdisk -cu /dev/sdb Command (m for help): m Command action -- d delete a partition l list known partition

Linux环境:fdisk 及parted磁盘分区管理工具介绍

1. fdisk分区工具及实质 2.查看磁盘分区信息 3.查看磁盘分区cat /proc/partitions ll /dev/sd* 4.parted 磁盘分区管理工具介绍 原文地址:https://blog.51cto.com/14298876/2381948

硬盘大于2T以上,用parted创建分区安装centos6.5

之前从来没有在硬盘容量大于2.6以上安装centos,刚拿到新一台机器,像平时一样,安装centos系统时,3T硬盘分区是这样规划的 /boot    200M swap    实际物理内存2倍即可 /   剩余空间给到根分区 一.步聚 1.安装系统时,进入第二个控制台(选语言界面)按ctrl+alt+f2 进入shell环境中 2.parted /dev/sda  会进入part的shell子环境 3.将MBR磁盘格式化为GPT mklabel gpt 8.显示磁盘分区 print 9.退出p

Centos7 LVM管理的逻辑卷重新划分分区

https://www.cnblogs.com/kevingrace/p/5825963.html umount /home 卸载掉/home目录 vi /etc/fstab 编辑分区表文件,注释掉/home分区 systemctl reboot 重启 df -h 查看磁盘情况 Mount 查看挂载情况 vgdisplay -v 查看lvm情况 lvremove /dev/cl/home 删除/home分区 vgdisplay -v 查看lvm情况 lvextend -L850GiB /dev/

Linux Engineer学习------ISCSI

实验环境:修改两台虚拟机防火墙默认区域为trusted [[email protected] ~]# firewall-cmd --set-default-zone=trusted [[email protected] ~]# firewall-cmd --set-default-zone=trusted 1.parted 划分分区的指令:parted (专门做大空间划分 2T) GPT: 突破了4个主分区限制,可以有很多主分区 1.1交互式分区 [[email protected] ~]# p

如何使用fdisk与parted对不同容量硬盘分区

一.简介 通常我们用的比较多的一般都是fdisk工具来进行分区,但是现在由于磁盘越来越廉价,而且磁盘空间越来越大;而fdisk工具他对分区是有大小限制的,它只能划分小于2T的磁盘.如果使用fdisk对大于2T的磁盘分区,虽然可以分区,但仅识别2T的空间,所以磁盘容量超过2T的话,就使用Parted工具来实现对GPT磁盘进行分区操作. GPT格式的磁盘相当于原来MBR磁盘中原来保留4个partition table的4*16个字节,只留第一个16个字节,类似于扩展分区,真正的partitionta