目录
一:查看磁盘信息
fdisk : 这个命令是磁盘分区表操作工具,fdisk能将磁盘分区,同时也能为每个分区指定分区类型,总的来说,fdisk就是磁盘工具
- fdisk -l : 查看硬盘分区表。 从这里我们可以看出,此系统中挂载了一块硬盘 sda。这块硬盘有三个分区,分别为 sda1,sda2和sda5。sda1是主分区,可以引导启动,分区类型是Linux;sda2是extend扩展分区,sda5是逻辑分区,sda5的Type类型是swap,所以可知sda5是交换分区。sda=sda1+sda2+sda5
- df -Th : 显示已挂载的磁盘文件系统。
- cat /proc/partitions : 显示已识别的所有分区
二:Linux磁盘分区
在windows下硬盘分区很简单,有专门的磁盘管理工具,还有众多的第三方软件可以对硬盘进行分区,都是图形化的,操作简单方便。所以这里我们就不多说。
今天主要将的是在Linux下用 fdisk 这个命令来对硬盘进行分区的。Linux下对硬盘分区大致可以分为七步。
- 添加并识别硬件设备 fdisk -l 查看是否识别 或者 ls -l /dev/sdb 查看是否有这个设备
- 创建分区并识别分区 fdisk /dev/sdb 按照步骤一步步对硬盘分区,然后保存退出
- 制作文件系统 mkfs.ext4 /dev/sdb1 对sdb硬盘的第一个分区制作ext4文件系统
- 制作磁盘标签 e2lable /dev/sdb1 newpart 给分区起一个别名
- 创建挂载点 mkdir /mnt/sdb1 在/mnt 目录下新建一个挂载点
- 将分区信息写入文件系统分区表 修改/etc/fstab文件,将分区信息写入,保存退出
- 挂载文件系统 mount -a 读取fstab文件,挂载文件中所有文件系统。 df -Th 查看是否挂载上
第一步:我系统原来有一块硬盘 /dev/sda 大小60G,后来我再加了一个20G的硬盘,可以看到,已经识别到了: /dev/sdb
第二步:接下来我要对 sdb 进行分区,使用 fdisk /dev/sdb 命令 ,进入 fdisk 模式。这时,有好多选项:
- n 创建新的磁盘分区
- d 删除已存在的磁盘分区
- l 查看支持的磁盘分区类型
- t 转换分区类型
- p 查看磁盘的分区信息
- w 保存修改并退出
- q 不保存直接退出
我们输入 l 查看一下支持哪些磁盘分区类型,可以看到,支持这么多种分区类型。
我们输入 n 创建新的磁盘分区。
然后让我们选择Partition Type 分区类型,默认是 primary 主分区,还有 extend 扩展分区。我们选择默认,直接回车即可。
然后让我们选择分区数字,范围1-4。默认是从1开始的。如果上一步选的是扩展分区,则选择4。我们直接回车默认即可。
然后让我们选择扇区起始编号,默认是2048,我们也选默认,回车即可。
然后就让我们输入这个分区的大小了。这里我们输入的是 +5G ,即第一块分区的大小是5G。
这样,我们就已经建好了一个标准的Linux格式的分区类型了。
我们再建四个分区,一个swap分区类型的sdb2分区,一个FAT32分区类型的sdb3分区。一个extend扩展分区sdb4,扩展分区里面有一个逻辑分区 sdb5。
sdb2和sdb3都是主分区,建立方法和第一个差不多,只不过建成后输入 t 然后修改分区类型,再输入对应的分区类型ID即可。
扩展分区sdb4和逻辑分区sdb5建立方法有点不同。建立sdb4的时候,选择分区类型 e ,即扩展分区。然后一路回车即可。就是把剩下的所有空间都给sdb4。sdb4只是相当于一个容器,并不能真正的使用,要在其中建立逻辑分区才可以使用。所以我们新建逻辑分区sdb5,一路回车即可。就是把扩展分区的容量都给了逻辑分区sdb5了。然后输入 p 查看已分配的分区。输入 w 保存退出!
识别新分区: partprobe /dev/sdb
cat /proc/partitions 查看已识别的分区。这里我们可以看到已经识别到了我们刚刚建立的所有分区。
第三步:创建好了新分区后,我们就要对新分区分配文件系统了,不同的分区类型有不同的文件系统,使用的指令也不一样。扩展分区是一个容器,不用分配文件系统。sdb2交换分区类型是用命令 mkswap。其他几个分区类型用的是 mkfs 命令,sdb1和sdb5用的是标准的ext4文件系统,sdb3用的是vfat文件系统。(本来sdb5想用xfs文件系统,结果kali不支持)
第四步(可选):我们就可以给分区制作LABEL标签了,也就是别名,这一步可做可不做。只不过在最后修改fstab文件的时候可以用别名表示分区。e2label /dev/sdb1 newpart 。然后使用 blkid 可以查看已经制作好的文件系统的信息。
第五步: 我们就去/mnt/ 文件下建立挂载点,分别是 sdb1 、sdb3 、sdb5的挂载点。sdb2 交换分区不需要挂载点,sdb4扩展分区也不需要挂载点。
第六步: 我们就可以去修改 /etc/fstab 文件了,把我们的分区信息写入进去,保存退出,这里要注意的是swap分区类型的挂载点就是swap,文件系统也是swap。这里有6个字段:
- 第一列表示待挂载的文件系统,挂载方式可以是设备路径(/dev/sdb1),可以是LABEL,可以是UUID
- 第二列是挂载点,表示设备使用后,从那个接入点使用磁盘空间
- 第三列是文件系统类型,制作文件系统时的格式写在这个位置
- 第四列是挂载时的磁盘参数,默认包含可读可写等
- 第五列是是否对磁盘做dump备份
- 第六列是是否对磁盘做fsck检查
第七步: 就是挂载文件系统了,使用mount -a ,就是挂载fstab文件中的所有文件系统。
然后使用 df -Th 查看已挂载的所有文件系统。
swap分区sdb2不显示在这里,因为它没有挂载点。
extend扩展分区sdb4也不会显示在这里,因为他仅仅是一个分区,并没有分配文件系统。
swap分区的作用是创建一个虚拟内存,开启虚拟内存的指令为 swapon -a,将开启所有fstab文件中的swap分区
关闭使用swapoff,如果只是关闭一个分区,swapoff /dev/sdb2,关闭所有 swapoff -a
查看虚拟内存空间变化可以使用 free -m ,查看当前的虚拟内存可以用 swapon -s
可以看到,开启了我们创建的虚拟内存后,虚拟内存数量多了一个,虚拟内存空间也变大了
写了一个脚本实现自动分区,目前只支持分配主分区和标准的linux文件系统(ext4/xfs)的分区
#! /bin/bash
# Author:谢公子
# Date:2018-10-13
# Function:对硬盘进行分区,得到一个标准的linux文件系统(ext4/xfs)的主分区
cat /proc/partitions > old
read -p "请输入你要分区的硬盘(写绝对路径,如:/dev/sda):" A
if [ -e $A ];then
echo "true"
else
echo "该设备不存在!!"
exit
fi
read -p "请输入你要创建的磁盘分区类型(这里只能是主分区,默认按回车即可):" B
read -p "请输入分区数字,范围1-4,默认从1开始,默认按回车即可:" C
read -p "请输入扇区起始表号,默认按回车即可:" D
read -p "请输入你要分区的分区大小(格式:如 +5G ):" E
fdisk $A << EOF
n
p
$C
$D
$E
w
EOF
echo "一个标准的linux文件系统的分区已经建立好!!"
partprobe $A
echo "-------------------------------"
cat /proc/partitions
cat /proc/partitions > new
F=`diff new old | grep "<" | awk '{print $5}'`
echo "-------------------------------"
echo $F
echo "你想对新分区设定什么类型的文件系统?有以下选项:"
echo "A:ext4文件系统"
echo "B:xfs文件系统"
read -p "请输入你的选择:" G
case $G in
a|A)
mkfs.ext4 /dev/$F
echo "该分区将被挂载在 "/mnt/$F" 下"
m=`ls /mnt/|grep $F | wc -l`
if [ $m -eq 0 ];then
mkdir /mnt/$F
fi
n=`cat /etc/fstab | grep /dev/$F| wc -l`
if [ $n -eq 0 ];then
echo "/dev/$F /mnt/$F ext4 defaults 0 0" >> /etc/fstab
else
sed -i '/^/dev/$F/c/dev/$F /mnt/$F ext4 defaults 0 0' /etc/fstab
fi
mount -a
df -Th
;;
b|B)
mkfs.xfs -f /dev/$F
echo "该分区将被挂载在 "/mnt/$F" 下"
m=`ls /mnt/|grep $F | wc -l`
if [ $m -eq 0 ];then
mkdir /mnt/$F
fi
n=`cat /etc/fstab | grep /dev/$F | wc -l`
if [ $n -eq 0 ];then
echo "/dev/$F /mnt/$F xfs defaults 0 0" >> /etc/fstab
else
sed -i '/^/dev/$F/c/dev/$F /mnt/$F xfs defaults 0 0' /etc/fstab
fi
mount -a
df -Th
;;
*)
echo "你的输入有误!!"
esac
三:Linux分区的卸载
现在把我们上面建立的几个分区都给卸载了
第一步:先卸载所有已挂载的分区。先查看哪些分区已经挂载上 df -Th ,再依次卸载。最后关闭虚拟分区,因为系统原来就分配有虚拟分区,所以我们只关闭我们自己新建的虚拟分区 swapoff /dev/sdb2 。再最后查看是否已卸载完
如果umount的时候,显示设备正忙。可以使用 fuser -mv /mnt/sdbx 来查看哪个进程在使用这个设备,然后kill掉即可。
第二步:修改 /etc/fstab 文件,把我们这几个分区的信息都给删除了或者注释掉
第三步:进入/dev/sdb 里面, fdisk /dev/sdb ,一路按 d ,把创建的所有分区给删除了,然后 p 查看是否删除干嘛 ,w 保存。
刷新一下 sdb 磁盘的分区信息 partprobe /dev/sdb 。
然后查看识别到的分区信息 cat /proc/partitions ,可以看到已经删除干净了。
四:Linux磁盘配额
管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。既可对用户存储文件数量做限制,也可对用户存储文件大小做限制
磁盘配额的分为五步:
- 挂载的同时需要为文件系统添加支持配额的选项 usrquota , grpquota
- 配额检查 quotacheck -augcv ,在分区中生成配额文件 aquota.user和 aquota.group
- 为用户建立配额信息 edquota -u/g 用户名/组名
- 开启/关闭配额功能 quotaon -a 、 quotaoff -a
- 查看配额信息 quota -u 、 quota -g 、 repquota -a
这里我用Red hat7做实验,在Red hat7上新建了一个sdb1的分区,用sdb1做磁盘配额实验。
第一步:修改 /etc/fstab文件,找到sdb1所对应的挂载信息,在磁盘参数defaults后面加上 usrquota,grpquota,意思是给这块分区添加用户配额和组配额的功能。
设备启用了配额后,需要将文件系统重载。
umount /mnt/sdb1 ;mount -a (或直接重新挂载 mount -o remount /mnt/sdb1)。
然后查看配额信息是否已经添加进去了 mount | grep sdb1
第二步:执行配额检查 quotacheck -augcv
- -a 扫描所有支持配额的分区
- -u 扫描磁盘并计算用户所占用的文件数
- -g 扫描磁盘并计算组所占用的文件数
- -c 创建配额文件 aquota.user 和 aquota.group
- -v 显示详细信息
执行后,会检查所有支持磁盘配额的分区,如果分区之前有配置配额,先关闭,再次开启会有配置文件被更新。
如果是第一次创建磁盘配额,那么会提示之前没有任何配额文件,并且会在分区中生成配额文件 aquota.user 和 aquota.group
第三步:为用户或组建立配额信息
edquota -u xie 编辑用户 xie 的配额
edquota -g IT 编辑组IT的配额
一共有六个字段
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0 80M 100M 0 8 10
前三个字段表示针对文件空间限制,后三个字段表示针对文件数量限制
- 第一个字段 blocks 表示用户在文件系统中已占用的空间统计,一般我们不做修改
- 第二个字段 soft 表示用户创建文件时,文件空间的警告阈值,超过数值则提示(软限制一般为提醒,小于硬限制即可,不设置或者超过硬限制都无意义)
- 第三个字段 hard 表示用户的空间限制,最大使用的磁盘空间
- 第四个字段 inodes 表示用户已创建文件的数量统计,一般我们不做修改
- 第五个字段 soft 表示用户在文件系统中创建文件的数量警告阈值,超过数量则提示
- 第六个字段 hard 表示用户创建文件的数量限制,最大创建文件数量
这个截图的意思是限制用户xie在此磁盘中最大使用空间100M ,并且使用超过80M就提示。最多使用创建10个文件,并且超过8个文件就提示。
第四步:开启 / 关闭配额 功能
如果开启的时候显示设备或资源忙,就先关闭所有配额,再重新打开。
quotaon -a 表示开启支持配额功能的所有分区
quotaoff -a 表示关闭支持配额功能的所有分区
第五步:查看配额信息
查看配额信息的方式有两种。
- quota -u 用户名 只查看用户的配额信息
- quota -g 组名 只查看组的配额信息
- repquota 设备 查看设备内的配额信息
注:只有当用户在这个分区上有数据时,才可以看到配额信息,否则只显示none
第六步:验证配额
配置好了磁盘配额后,我们就去验证了,切换到 xie 用户 ,提前给测试分区权限。
我们复制文件到磁盘上,每次复制30M ,当复制到第三次的时候,达到了90M>80M ,所以就提示我们磁盘紧张了。当第四次复制时,就提示已经超过磁盘配额了,第四次只能复制10M的文件过去。
我在上面创建了8个文件,当创建第9个的时候提示我磁盘紧张了。当创建第11个,直接提示我磁盘限制,创建不了第11个了。
相关文章: Linux下性能监控与进程管理