Skip to content

IO Tools

dd

bash
# out of CPU
dd if=/dev/zero of=/dev/null

#
time dd if=/dev/zero of=test.file bs=1G count=2 oflag=direct

fio

bash
# sequence read
fio -filename=/tmp/test.file -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r

# sequence write
fio -filename=/tmp/test.file -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_w

# random write
fio -filename=/tmp/test.file -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_randw

# mixed random read and write
fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r_w -ioscheduler=noop

iostat

bash
# install
apt install sysstat
# use
iostat [options] [delay [count]]


# probe uninterrupted every 2 seconds
iostat 2
# probe 10 times per second
iostat 1 10


# display info
-c     Display the CPU utilization report.
-d     Display the device utilization report.
-h     Display human
-x     Display extended statistics
-t     Display timestamp

# example
iostat -dhx sda sdb 1 10

iotop

bash
iotop -p xxx

pidstat

bash
pidstat -d 1

sar

bash
sar -b -p 1

Formatting and Partitioning

blkid && lsblk

bash
# show all block device infomation
blkid
lsblk -f /dev/sda
lsblk -o UUID,PARTUUID,PATH,MOUNTPOINT /dev/sdb

fdisk && gdisk && parted

bash
# MBR: fdisk, parted
# GPT: gdisk, parted


# show disk partition info
fdisk -l /dev/sda
gdisk -l /dev/sda
parted -l /dev/sda


# partitioning with Legacy Boot(MBR)
fdisk /dev/sda


# partitioning with UEFI(GPT)
gdisk /dev/sda


# partitioning with Legacy Boot(MBR)
parted /dev/sda -- mklabel msdos
parted /dev/sda -- mkpart primary 1MB -2GB
parted /dev/sda -- set 1 boot on
parted /dev/sda -- mkpart primary linux-swap -2GB 100%


# partitioning with UEFI(GPT)
parted /dev/sdb -- unit mib
parted /dev/sdb -- mklabel gpt
parted /dev/sdb -- mkpart primary 1 3
parted /dev/sdb -- mkpart ESP fat32 3 515
parted /dev/sdb -- mkpart root ext4 515 -1
parted /dev/sdb -- set 1 bios_grub on
parted /dev/sdb -- set 2 esp on


# flush partition table
partprobe


# adjust partition
growpart /dev/sda 1


# adjust filesystem
resize2fs /data        # ext2/ext3/ext4
xfs_growfs -d /data    # xfs

mkfs.ext4 && mkfs.xfs

bash
# formatting ext4 filesystem
mkfs.ext4 /dev/sda1
mount /dev/sda1 /data
vim /etc/fstab


# formatting xfs filesystem
mkfs.xfs /dev/sda1
mount /dev/sda1 /data
vim /etc/fstab

others

bash
# 无需重启服务器,通过刷新磁盘数据总线方式获取新加磁盘
for host in $(ls /sys/class/scsi_host);
do
  echo "- - -" > /sys/class/scsi_host/$host/scan
done

# lvm