前言
Windows的磁盘管理相比大家天天用,已经比较熟悉了,比如大家经常给硬盘分区: C盘分300G NTFS格式、又或是给U盘分区:分一个区,EXFAT格式等等。
但对于Linux的磁盘分区,甚至是安装系统时的磁盘分区,估计是很多人头疼的一个环节,什么grub啊、/boot啊、swap啊等等,我在中学的时候也对这方面头疼,后来熟练了就会好很多,今天咱们就来俩着重聊聊Linux的磁盘分区
首先,大家可能都听过一句话,叫“Linux一切皆文件”,如果是MacOS用户,可能折腾的过程中已经体会到了,而对于Windows用户这句话还是需要去浅浅的理解一下的。比如说Windows每个分区都是一个盘符,比如C盘、D盘,而在Linux系统则是根目录下的一个目录,比如说/www 、/mnt
另一个例子就是说,在Windows下,每个物理设备比如说CPU、磁盘控制器啊或是一些PCIE设备像是网卡、显卡等等设备,在设备管理器中都可以看到
而在Linux,每个设备都对应/dev目录(device)下的一个文件,如图
比如下面的sda,就代表你的第一块SATA硬盘(SATA Device a),第二块硬盘就是sdb,而sda1又是sda硬盘的第一个分区。而在Windows上给每个分区分配驱动器号的操作,对应到Linux系统上,就是挂载(Mount)
之前玩过云服务器的同学可能会比较了解,毕竟有时候添加硬盘,就需要重新挂载磁盘。没有接触过的同学也不要急,学汇编语言用dosbox的时候也需要挂载目录,而在Linux系统添加一块新硬盘总共三部曲: 分区/格式化/挂载
实例1: Ubuntu挂载新硬盘
我现在是在开机状态下添加了一块100G的SAS硬盘,然后使用以下命令任意一条去查看磁盘状态
fdisk -l #查看磁盘详细信息
lsblk #列出可用块设备信息
df -h #磁盘使用情况以及挂载点
这里我是用lsblk去查看
可以看到下面已经出来了 "sdb 100G"的第二块硬盘
这时我们先对sdb硬盘进行分区,使用 fdisk /dev/sdb 命令 ,用fdisk工具分区
显示这样就说明进入了fdisk工具,之后输入 n 是新建分区,然后分区类型分区好等等默认就可以,创建完成后输入 w 保存退出
这时已经分区完成,我们lsblk就能发现sdb设备下多出了一个分区
分区完成后格式化,使用mkfs命令去把sdb1分区格式化为ext4格式
mkfs.ext4 /dev/sdb1
最后就是挂载了,我们将这个分区挂载到 /mnt 目录下,使用mount挂载
mount /dev/sdb1 /mnt
挂载完成后我们再df -h 查看挂在情况就可以看到已经将这个分区挂载到了/mnt目录下
但是,这样的挂载重启就会失效,需要重新挂载,具体请见文章后半部分:实例3: 设置磁盘自动挂载
实例2: Ubuntu创建软Raid阵列
Raid我们在上一篇文章中讲过,大部分服务器以及工作站都使用独立Raid卡来实现Raid功能,但在一些情况下我们无法使用硬件Raid卡,这时我们就可以使用操作系统自带的软Raid功能
(WinServer步骤较为简单,不再赘述,请自行搜索)
由于刚好要给实验室的CTF靶场搬迁到内网,之前在阿里云数据安全不用考虑,冗余阿里云在做,现在搬迁到自己服务器,那数据安全和数据冗余就要我们自己来做,为了保险起见,靶场的虚拟机我使用两块100G的硬盘来做Raid1保存数据(如上图)。
其实大部分步骤跟上面一样,只不过因为我们要做Raid,所以就只到分区就够了,只不过这里要操作两块盘(sda、sdb)
将两块盘分区完成后,这里需要用到一个软件叫mdadm,全名multiple devices admin,是Linux下的一款多盘管理软件,ubuntu系统自带的有,如果没有的话,使用apt install mdadm来安装,安装完成后创建Raid:
mdadm -Cv /dev/md0 -l1 -n2 /dev/sdb1 /dev/sdc1
#参数说明:
# Cv:创建一个阵列并打印出详细信息
#/dev/md0:阵列名称
# -l1(level):指定阵列类型为raid1
#-n4:指定将2个分区加入到阵列中去,分别为 /dev/sdb1 /dev/sdc1
执行完毕后还是lsblk就可以看到效果了
到这里聪明的同学就已经知道接下来改怎么做了,对了,就是剩下的两部 格式化/挂载了,现在相当于给原先两个分区(/dev/sdb1 和/dev/sdc1)合并成了一个阵列(/dev/md0)
还是用mkfs.ext4将/dev/md0分区格式化为ext4格式使用mount工具即可挂载到指定目录,我这里是挂载到了/www目录,使用df -h即可查看挂载路径
实例3: 设置磁盘自动挂载
每次挂载完磁盘后,重启挂载就会失效,这里提供两种办法
1.使用fstab实现磁盘自动挂载(推荐)
echo "/dev/sdb1 /www ext4 defaults 0 0" >> /etc/fstab
#或
echo "UID=0d32d2a5-6934-4316-b2c2-f3682707854f /www ext4 defaults 0 0" >> /etc/fstab
#/dev/sdb1 是你要挂载的磁盘 或是 UUID (使用blkid查看)
#/www是你的挂载目录
# ext4是格式
#default是参数,默认就行
#最后第一个数字是分区格式是否需要dump 默认0就行
#第二个数字是开机是否需要fsck检查,boot分区需为2,默认还是0
2.设置挂载命令开机启动
这种办法类似于你新建了个bat/vbs脚本文件放进了Windows的启动文件夹,而Ubuntu开机会默认执行/etc/rc.local中的命令
vim /etc/rc.local
#在后面添加mount命令: /mount /dev/md127 /www
TIPS:
1.第一次创建阵列如果使用的是默认的/dev/md0的话,重启后会变为/dev/md127,所以做完阵列后使用以下命令去将阵列名添加到mdadm的配置文件中
mdadm -Ds >> /etc/mdadm/mdadm.conf
(mdadm --detail --scan >> /etc/mdadm/mdadm.conf)
# 追加重定向到 mdadm.conf 中
update-initramfs -u
# 此模式更新现在的initramfs
2.删除Raid:
umount /mnt
#取消挂载
mdadm -S /dev/md0
# 停止Raid mdadm:stopped /dev/md0 表明该阵列已经停止运行。
#lsblk查看,发现硬盘分区下没有raid分区了,但到此没有结束,重启后还会有raid信息,我们需要删除分区下的raid信息
mdadm --zero-superblock /dev/sdb1
3.Linux系统安装时的分区概述:
使用一整块盘时直接全盘安装,若手动分区,大致分为以下几个分区
- /boot 启动分区,不需要很大,存放grub引导程序,类似于Windows的ESP分区
- / 根目录,至少需要一个分区挂载到根目录
- /home 假如有数据盘的话可以挂载到home目录,不是必须
- SWAP 交换分区,类似于Windows的虚拟内存,内存<2G 分8G,内存>8G 分4G
补充:ubuntu为lvm时扩容卷组
# 自适应扩容分区 后缀为分区号
growpart /dev/sda 3
# 重新分配空间
sudo resize2fs /dev/sda
# 将空闲空间扩容给lvm卷
sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
# 重新分配空间
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv