时间:2018-05-24
姓名:魏文应
一、硬盘
硬盘的正常使用流程:
购买设备 -> 设备联机 -> 磁盘分区 -> 磁盘格式化(创建文件系统) -> 磁盘挂载 -> 正常使用
我们看 /dev/sda1
之类的:
-
/dev/
: 设备文件目录。 -
sd
: SCSI接口类型的硬盘。 -
a
: 代表第几块盘,a代表第一块盘。 -
1
: 分区,1、2、3、4是主分区,5、6、7、8、9等是逻辑分区。
二、使用fdisk管理分区
- 注意:fdisk 无法支持 2T 以上容量的磁盘分区,超过2T,请使用后面将会讲到的parted工具。
实验准备
做实验之前,添加一块硬盘,VMware虚拟机中,点击添加,然后添加一块硬盘:
然后重启系统,用 fdisk -l
命令就可以看到新添加的硬盘了:
图中的 /dev/sdb 就是我们刚才添加的硬盘。
给一块磁盘分区
实验 fdisk 命令,加上磁盘,比如我要对sdb磁盘分区,执行 fdisk /dev/sdb
命令,然后会进入fdisk的一些命令提示中,输入m打印帮助信息:
然后输入相应的分区命令:
然后输入 w 保存退出,分区完成,执行命令ls /dev/sd*
, 就能看到刚才分区得到的磁盘分区了。接下来,格式化分区:
mkfs.ext4 /dev/sdb1
这里我格式化为ext4类型文件系统,你也可以格式化为其它类型(输入mkfs,再按两下Tab键,就能看到有哪些文件系统类型可以选择)。通过 blkid
命令,查看硬盘分区类型:
blkid /dev/sdb1
然后 挂载分区:
# 创建一个挂载点
mkdir /sdb1# 将/dev/sdb1分区挂载到/sdb1
mount /dev/sdb1 /sdb1# 查看一下挂载上了没有
df -Th | tail 1
进入/sdb1这个目录,如果看到 lost+found
文件夹,也你能说明挂载没有问题。注意:磁盘挂载中,一个挂载点可以挂载多个磁盘,比如:
mount /dev/sdb2 /sdb1
mount /dev/sdb1 /sdb1
这里都挂载到/sdb1这个目录下,那么去掉这个挂载点,你就要umount 两次:
umount /sdb1
umount /sdb1
这样 /sdb1 这个挂载点才没有挂载磁盘。 当然,也可以直接指定设备去卸载:
umount /dev/sdb1
开机自动挂载分区
刚才mount 是手动挂载磁盘分区, 下面是开机自动挂载。在 /etc/fstab 文件中,加入下面一句话:
/dev/sdb1 /sdb1 ext4 defaults 0 0
它是什么意思呢? 意思如下:
/dev/sdb1 | /sdb1 | ext4 | defaults | 0 | 0 |
---|---|---|---|---|---|
要挂载的设备分区 | 挂载点 | 文件系统类型 | 挂载选项 | 是否要备份 | 是否检测 |
考虑到 /dev/sdb1
不是唯一的(因为这个值是变的),比如:
/dev/sda 磁盘disk1
/dev/sdb 磁盘disk2
/dev/sdc 磁盘disk3
这里表示有三块磁盘,如果 磁盘disk1 被拔下来了,重新开机时就是(因为系统检测到磁盘,是a/b/c/d这样来排列的,先从a开始表示第一块磁盘):
/dev/sda 磁盘disk2
/dev/sdb 磁盘disk3
如果我们还认为 /dev/sda 是 磁盘disk1 ,就会发生问题,因为这时它是 磁盘disk2。为了解决这个问题,我们应该用 UUID标识 一块磁盘(UUID具有全球唯一性),所以我们应该这样:
UUID=9d0d24e5-0bbe-463e-9cfa-ec6c9f44cca8 /sdb1 ext4 defaults 0 0
这个 UUID 可以通过 blkid
这个命令查询得到:
blkid /dev/sdb1
让/etc/fstab内容立即生效
我们在修改了磁盘配置文件 /etc/fstab 这个文件以后,可以执行下面命令让其生效:
mount -a
这个命令执行了 /etc/fstab 的配置信息。
将剩余磁盘容量都给逻辑分区
当我们创建了一些主分区以后,我们还想创建逻辑分区,那么我们就可以先执行操作,将剩下的容量都给了逻辑分区:
我这里sdb4就是剩下容量。然后我们可以和之前创建主分区一样的方法,创建逻辑分区。注意:这时候的sdb4是不能直接访问的。 意思是我们要在sdb4的基础上,创建逻辑分区。
三、使用parted分区工具
- GPT 分区表:全球唯一标识分区表, GPT对分区数量没有限制(windows系统GPT有限制,最大128个分区,可管理磁盘大小18EB,NTFS文件系统最大才支持256TB)。
- MBR 分区表:最大4个分区表项。
- parted工具:适用于大容量磁盘的分区(超过2T)。
准备工作:
- 查看parted工具是否已经安装:
rpm -rf `which parted`
。 - 查看磁盘状态信息:
parted -l
- 在VMware设置中添加一块新的磁盘,大小为
3T
(你的物理磁盘没有这么大没有关系,这是虚拟的),reboot重启linux。 - 使用
fdisk -l
命令,看看有没有我们刚才添加的3T磁盘,我这里是/dev/sdc。
然后对磁盘进行分区操作:
- 指定要分区磁盘:
parted /dev/sdc
。 - 上面一步开始,就进入了parted命令行操作。
- 指定分区表类型:
mklabel gpt
。 - 创建分区:
mkpart primary 0 100
(primary是分区名称,你任意取一个,0是分区起始地址,100是100M大小)。 - 忽略警告信息(这是分区比较小的提示信息,如果大点就没有这个警告了):
ignore
:warning: The resulting partition is not properly aligned for best performance. 警告:结果分区没有正确对齐以获得最佳性能。
- 可以查看一下分区结果:
print
。 - 最后退出parted :
quit
。
可以分一个大点的分区:
指定要分区磁盘:
parted /dev/sdc
。最后退出parted :
quit
。
对分区进行格式化和挂载:
- 格式化分区:
mkfs.ext4 /dev/sdc1
(我这里是/dev/sdc1这个分区,你根据自己要格式化的分区而定)。 - 创建挂载点:
mkdir /sdc1
。 - 挂载:
mount /dev/sdc1 /sdc1
。
在格式化分区时,如果没有安装相关文件系统格式化工具,可以用yum搜索安装,比如安装mkfs.xfs
工具,
yum search mkfs
或者
yum search xfs
比如结果显示: xfsprogs.i686,那么用yum安装它即可:yum -y install xfsprogs.i686
。
四、扩展swap分区
我们可以对swap分区大小进行修改。下面扩大swap分区:
创建两个逻辑分区,我这里是/dev/sdb3、/dev/sdb5,这两个分区100M。
格式化分区(swap专用工具):
mkswap /dev/sdb3
、mkswap /dev/sdb5
。可以查看一下内存情况:
free -m
(MB为单位显示)。添加到swap中:
swapon /dev/sdb3
。再查看一下内存情况,你会发现内存swap分区变大了约100M:
free -m
。去除swap分区:
swapoff /dev/sdb3
(将刚才添加的sdb3从swap分区中去掉)。
开机时自动挂载swap分区:
-
打开配置文件:
vim /etc/fstab
,添加刚才的磁盘分区:/dev/sdb3 swap swap defaults 0 0
更好的做法是,通过
blkid /dev/sdb3
指令,查看 /dev/sdb3 的UUID,用UUID替代 /dev/sdb3:UUID=4fb2dd10-2bc7-48fe-8158-376dd4001c67 swap swap defaults 0 0
直接执行
mount -a
发现不起作用,reboot
重启系统就可以了,然后通过free -m
查看一下。
十、问题处理
磁盘分区后,在/dev/目录下找不到刚才新建的分区
如果分区以后,执行 ls /dev/sdb2
命令,没有看到你的分区(比如我这里是sdb2分区),那么刷新一下磁盘:
partprobe /dev/sdb
如果执行 partprobe /dev/sdb
命令,提示下面错误信息:
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sdb (Device or resource busy). As a result, it may not reflect all of your changes until after reboot.
可能是这块磁盘的哪个分区已经被挂载了:
df -Th
比如我们之前执行 mount /dev/sdb1 /sdb1
命令,将 /dev/sdb1/ 挂载了 /sdb1 上,那么我们可以先卸载这个挂载点:
umount /sdb1
然后再执行 partprobe /dev/sdb
命令。如果还是不行,看看磁盘是否有分区被挂载为了swap分区:
cat /proc/swaps
如果有sdb磁盘挂载到swap分区,可以关闭它:
swapoff /dev/sdb3