6Linux磁盘管理
在Windows中我们可以直观的看到系统有多少分区。以及每个分区使用多少,还剩多少。但是Windows下分区是很难明白原理的。Linux下分区很快就能明白分区的原理。
Linux系统磁盘被写满后容易导致磁盘损坏
6.1 查看磁盘或者目录的容量
---------------------------------------------------------------------
6.11 查看磁盘容量--命令df
#df
df [-ihkm]
-i:查看inode使用状况,如果达到100%,即使磁盘有剩余,也会提示磁盘已满
-h 表示使用合适的单位显示
-k -m 分别表示用KB或MB表示。
6.1.2 查看目录容量---命令du
命令du用来查看某个目录或文件所占用的空间的大小
du [-abckmsh]
-a 表示列出全部分拣和目录的小小。
-b 表示值以B的单位输出
-k 表示已KB输出
-m 表示已MB输出
-c 表示最后加总
-s 表示只列出总和
-h 自动调节显示单位
6.2磁盘的分区和格式化
--------------------------------------------------------------------------------
6.2.1添加虚拟磁盘
现实机器增加磁盘是买硬盘,虚拟机模拟增加硬盘的操作如下:
在当前虚拟机选项卡点击鼠标右键,选择设置
造弹出的“虚拟机设置”对话框左侧选中磁盘,然后点击下方的“添加”,此时弹出添加硬件向导对话框,点击“下一步”
一直默认点下一步
直到"指定磁盘容量"的时候设定最大磁盘大小,我选择的是20G,然后选择“将虚拟磁盘存储为单个文件”
继续点击下一步,然后点击完成。
磁盘虽然添加了,但是系统还不能被识别,需要重启一下
6.2.2 给新添加的磁盘分区
fdisk是Linux下的硬盘分区工具。是一个很实用的命令。但是只能划分小于2T的分区。
#fdisk
#fdisk -l
我们看到我们增加的磁盘成功了,在创建系统的时候我们设置了一块磁盘是20G,名称是sda。这个磁盘分为了三个区。sda1,sda2,sda3
而我们新加的sdb磁盘也是20G,我不清楚为啥我添加的20G,这里显示确实21.5G
现在我们开始来分区了
#fdisk /dev/sdb
输入p //-------print the partition table 打印分区表
原来新磁盘是不会分区的,那么我们就来给他分区吧,输入n //add a new partition
提示你分区的类型是主分区还是可扩展分区。选择p
使用p查看已经多了一个分区了
按照以上步骤一直创建到分区4
第四个分区创建为可扩展分区,并且把剩余空间全部给他
然后继续创建分区
他会提示你,所有主分区已经使用了,给你添加的分区只能是逻辑分区了。
逻辑分区的容量是从第四个可扩展分区开始的
然后一直把可扩展分区分给逻辑分区:
第四个分区是不能使用的,因为他是可扩展分区,是用来划分逻辑分区的。因此只能使用逻辑分区。
输入命令w,将分区表写进磁盘并退出
然后再看看分区的情况:
到了这里应该学会了分区了。分区容易导致数据丢失,但是我们是新磁盘所以不必担心。
现在建议将sdb磁盘的所有分区删了从新分配。为什么?这里是重点:
Linux系统只允许创建4块主分区,如果要创建更多就只能拿一块主分区来作为可扩展分区。然后再可扩展分区上选择创建逻辑分区。我们当然建议使用逻辑分区,而不是主分区。因此删了重来吧。
------------------------------------------------------------------------------------------------
# fdisk /dev/sdb //重新分区
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):m
命令操作
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
命令(输入 m 获取帮助):d 删除分区
分区号 (1-7,默认 7):1
分区 1 已删除
命令(输入 m 获取帮助):d
分区号 (2-7,默认 7):2
分区 2 已删除
命令(输入 m 获取帮助):d
分区号 (3-7,默认 7):
分区 7 已删除
命令(输入 m 获取帮助):d
分区号 (3-6,默认 6):
分区 6 已删除
命令(输入 m 获取帮助):d
分区号 (3-5,默认 5):
分区 5 已删除
命令(输入 m 获取帮助):d
分区号 (3,4,默认 4):
分区 4 已删除
命令(输入 m 获取帮助):d
已选择分区 3
分区 3 已删除
命令(输入 m 获取帮助):
命令(输入 m 获取帮助):d
No partition is defined yet!
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xb2251658
设备 Boot Start End Blocks Id System
命令(输入 m 获取帮助):
然后我们重新创建一个可扩展分区
我将所有容量全部给第一块可扩展分区,然后再它的基础上衍生逻辑分区sdb1,sdb2,sdb3出来。
输入w保存
划分分区原来如此简单啊。Windows上我就一直搞不懂哪些分区是怎么划分的,逻辑分区主分区到底啥意思搞不懂,在Linux上一下就明白了。所以Linux才能让你了解系统的工作原理,windows不是不行,而是他的图形界面就让你不容易理解这些东西。毕竟是给普通大众用的
6.3 格式化磁盘分区
-----------------------------------------------------------------------------------
磁盘虽然分好了但是不能用,还需要对每个分区格式化,所谓的格式化其实就是安装文件系统。
centos7使用的xfs系统,但依然可以给他指定ext2,ext3,ext4不过就别瞎折腾了,xfs肯定是比他们棒才会作为centos7的默认系统。
6.3.1 安装文件系统
mke2fs,mkfs.ext2,mkfs.ext3,mkfs.etx4,
用man查看这四个发现其实都是一样的
mkfs.xfs
mke2fs常用参数,自己man查看吧,这里主要介绍快速格式化磁盘
# mke2fs -t ext4 /dev/sdb5
指定文件系统时,命令mke2fs -t ext4 /dev/sdb5等同于mkfs.ext4 /dev/sdb5
因为mke2fs不支持xfs,所以要想格式化xfs就要使用命令mkfs.xfs了
在输出中你是否关注到bsize=4096呢?这里有一个概念叫做“块大小”
磁盘格式化的时候会预先规定好每一个块的大小,然后再把所有的空间分割成一个一个的小块。存数据的时候就会一个快一个块的写入。这里默认是4096,当然如果你觉得你存数据一般都很小你也可以格式化的时候指定块大小。这里就不多说了。自己看man文档
然后把sdb7也给格式化了。
6.4 挂载、卸载磁盘
------------------------------------------------------------------------------------
将磁盘分区,在将每个分区格式化,但是还是不能使用,我们还需要将格式化好的分区挂载到指定目录下。
查看/dev/下的sdb,他们只是一堆块设备文件而已。
先回忆一下:
在创建系统的时候我们有一块20G的虚拟磁盘,我通过视图化操作将200M给了boot启动目录
将4G给了swap,将剩余的额全部给了/根目录。
他们就是把分好的区挂载到了指定的目录,从此忘这鞋目录中写数据的时候就会写到这鞋磁盘对应的分区中去。
在挂载到指定目录的时候要确保目录中的数据你已经备份过了,否则会冲掉目录中的数据,所以建议用空目录。
6.4.1 mount和umount
mount [块设备文件] [目录]
就可以将某分区挂载到目录上去了。
卸载已经挂载的分区
umount [块设备文件]
#umount /dev/sdb5
mount的选项有-a,-t,-o等等,在介绍这鞋选项的作用前先了解一个配置文件
mount的-a选项要结合下一节的配置文件一起使用。
6.4.2 /etc/fstab 配置文件
这个文件中显示了系统启动的时候需要挂载的各个分区
第一列是分区的标识,你可以写UUID,也可以写LABEL,也可以写分区名(/dev/sdb5)
第二列就是挂载点,
第三列是分区的文件系统格式
第四列是mount挂载的一些参数,一般情况下直接写default就可以
第五列是标识是否被dump备份,1表示备份,0表示不备份
第六列是表示开机时是否自检磁盘。,1,2都标是检测,0表示不检测。自检时1的优先级比2的高,如果两个分区需要同时被检测都写2
下面着重介绍第四列的参数
async/sync async表示磁盘和内存不同步,系统每隔一段时间就会把内存中的数据写入磁盘,而sync会同步内存和磁盘中的数据
auto/noauto 表示开机自动挂载和不自动挂载
default 表示按照大多数永久文件系统的默认值设置挂载,它包含了rw,suid,dev,exec,auto,nouser和async
ro 表示只按照制度权限挂载
rw 表示可读写权限挂载
exec/noexec 表示允许或不允许可执行文件执行。但千万不要把根分区挂载为noexec,否则将无法使用系统,甚至连mount命令都不能用
user/nouser 表示允许或不允许root外的其他用户改在分区。为了安全请使用nouser
suid/nosuid 表示允许或不允许分区有suid属性,一般设置为nosuid
usrquota 表示启动用户的磁盘配额模式,磁盘配额会针对用户先定他们使用的磁盘额度
grquota,表示启动群组的磁盘配额模式
好了 这个配置文件我们就学完了。其实很简单的。
现在来通过修改配置文件来挂载分区
通过在配置文件中增加:
LABEL=TEST123 /newdir ext4 defaults 0 0
然后通过mount -a你会发现用df -h|grep -v tmpfs查看的时候会发现多出一个块设备文件在/newdir下面。这就是mount -a的作用。
mount -o 用来指定挂载的分区有哪些特性。即上面的饿第四列的参数
例如:
#mount -o remount,ro,sync /dev/sdb5 /newdir
mkdir /newdir/dir2
无法创建目录"newdir/dir2":只读文件系统
mount -t 用来指定挂载分区的类型,默认不指定,会自动识别的
6.4.3 命令blkid
一台服务器上装了两块磁盘a,b。
如果你把两块磁盘都拔掉,将他们对调插上,重启。你会发现磁盘a显示sdb,磁盘b显示的是sda。搞反了。
挂在磁盘是通过/dev/sdb这样的块文件的名字来挂载的。如果该分区之前已经加入到了/etc/fastab中,系统启动就会重新读取,恰巧你又把两个磁盘插反了,导致挂载错分区。
为了避免这种情况我们就要使用UUID
#blkid
所以我们在做挂载操作的时候请将/dev/sdb1这样的文件名字改为它的UUID,卸载分区,挂载都请使用UUID
查询某个分区的UUID
#blkid /dev/sdb5
6.5建立一个swap文件增加虚拟内存
------------------------------------------------------------
待续......