在日常的Linux管理工作中,这部分内容使用还是比较多的。
查看磁盘或者目录的容量
1.“df” 查看已挂载磁盘的总容量、使用容量、剩余容量等,可以不加任何参数,默认是按k为单位显示的。
[root@localhost ~]# df
df常用命令 -i -h -k -m
“-i” 查看inodes使用状况,如果已用100%,即使磁盘空间有富余,也会提示磁盘空间已满。
[root@localhost ~]# df -i | grep -v tmpfs
“-h” 使用合适的单位显示,例如 ‘GB’
[root@localhost ~]# df -h | grep -v tmpfs
-k -m: 分别表示以KB和MB为单位显示。
[root@localhost ~]# df -k | grep -v tmpfs
[root@localhost ~]# df -m | grep -v tmpfs
简单介绍一下各列所表示的含义,其实如果你的Linux和阿铭的虚拟机一样也是中文显示的话,那么不用说太多,看字面意思就明白了。第一列是分区的名字,第二列为该分区总共的容量,第三列为已经使用了多少,第四列为还剩下多少,第五列为已经使用百分比,如果这个数值到达90%以上,那么你就应该关注了,磁盘分区满了可不是什么好事情,会引起系统崩溃的。最后一列为挂载点,你是否还记得,阿铭在装系统的时候,有说到这个词,”/dev/shm” 为内存挂载点,如果你想把文件放到内存里,就可以放到/dev/shm/目录下。
2.命令 : du 用来查看某个目录或文件所占空间大小.
“-a” 全部文件与目录大小都列出来。如果不加任何选项和参数只列出目录(包含子目录)大小。
[root@localhost ~]# du /boot/
[root@localhost ~]# du -a /dir2
如果du不指定单位的话,默认显示单位为K.
“-b” 列出的值以bytes为单位输出。
“-k” 以KB为单位输出,和默认不加任何选项的输出值是一样的。
“-m” 以MB为单位输出
“-h” 系统自动调节单位,例如文件太小可能就几K,那么就以K为单位显示,如果大到几G,则就以G为单位显示。
[root@localhost ~]# du -b /etc/passwd
1181 /etc/passwd
[root@localhost ~]# du -k /etc/passwd
4 /etc/passwd
[root@localhost ~]# du -m /etc/passwd
1 /etc/passwd
[root@localhost ~]# du -h /etc/passwd
4.0K /etc/passwd
“-c” 最后加总
[root@localhost ~]# du -c dir2
0 dir2
0 总用量
[root@localhost ~]# du dir2
0 dir2
[root@localhost ~]# du -s dir2/ //-s表示列表总和
0 dir2/
3.磁盘的分区和格式化
阿铭经常做的事情就是拿一个全新的磁盘来分区并格式化。这也说明了作为一个linux系统管理员,对于磁盘的操作必须要熟练。
a.添加虚拟磁盘
1) 在当前的虚拟机选项卡点击鼠标右键,选择 “设置”
2)此时会弹出 “虚拟机设置” 对话框 在左侧选中 “磁盘” 然后点击下方的 “添加” 按钮,此时会弹出 “添加硬件向导” 对话框 ,点击 “下一步” 按钮
3)“选择磁盘类型” 这里保持默认不用更改任何指标,直接点击 “下一步” 按钮
4)“选择磁盘” 对话框里也保持默认,直接点击 “下一步” 按钮
5)“指定磁盘容量” 这里需要修改一下,设定 “最大磁盘大小” 为5GB,然后选择 “将虚拟磁盘存储为单个文件” 单选按钮
6)继续点击一下按钮,然后点击 “完成” 按钮,最终完成添加新的虚拟磁盘。虽然磁盘已经添加了,但是系统暂时不不能被识别,需要重启一下系统才可以
4.命令 : fdisk
fdisk 是Linux下硬盘的分区工具,是一个非常实用的命令,但是fdisk只能划分小于2T的分区。
“-l” 后边不跟设备名会直接列出系统中所有的磁盘设备以及分区表,加上设备名会列出该设备的分区表。
[root@localhost ~]# fdisk -l
fdisk -l /dev/sda
以上例中可以看到阿铭新增的一块磁盘/dev/sab的信息
fdisk命令如果不加-l选项,则会进入另一个模式,在该模式下,可以以磁盘进行分区操作,示例命令如下:
[root@localhost ~]# fdisk /dev/sda
如果你输入 ‘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)
如果你的英文好,我想你不难理解这些字母的功能。阿铭常用的有’p’, ‘n’, ‘d’, ‘w’, ‘q’.
“p” 打印当前磁盘的分区情况。
‘n’ 建立一个新的分区。
‘w’ 保存操作。
‘q’ 退出。
‘d’ 删除一个分区
下面阿铭会把刚才增加的磁盘/dev/sdb进行分区操作。先使用 ‘p’ 命令看一下/dev/sdb的分区状况:
[root@localhost ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xf4121235.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): p
Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf4121235
Device Boot Start End Blocks Id System
Command (m for help):
可以看到目前/dev/sdb没有任何分区,下面阿铭给它建立第一个分区:
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
使用 ‘n’ 命令新建分区,它会提示是要 ‘e’ (扩展分区) 还是 ‘p’ (主分区) [1] 阿铭的选择是 ‘p’, 于是输入 ‘p’ 然后回车
分区号 (1-4,默认 1):
Partition number (1-4): 1
起始 扇区 (2048-10485759,默认为 2048):
起始 扇区 (2048-10485759,默认为 2048):2048
Last 扇区, +扇区 or +size{K,M,G} (2048-10485759,默认为 10485759):
Last 扇区, +扇区 or +size{K,M,G} (2048-10485759,默认为 10485759):+1000M
分区 1 已设置为 Linux 类型,大小设为 1000 MiB
命令(输入 m 获取帮助):
输入 ‘p’ 后,会提示分区数,这里阿铭写 ‘1’, 因为是第一个分区,当然你也可以写 ‘2’ 或 ‘3’, 如果你直接回车的话,会继续提示你必须输入一个数字,接着又提示第一个柱面从哪里开始,默认是 ‘1’, 你可以写一个其他的数字,不过这样就浪费了空间,所以还是写 ‘1’ 吧,或者你直接回车也会按 ‘1’ 处理,接着是让输入最后一个柱面的数值,也就是说你需要给这个分区分多大空间,关于柱面是多大阿铭不再细究,你只需要掌握阿铭教给你的方法即可,即写 “+1000M”, 这样即方便又不容易出错。用 ‘p’ 查看已经多出了一个分区:
继续上面的操作,一直创建主分区到4, 然后再一次创建分区的时候则会提示:
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分区号 (2-4,默认 2):2
起始 扇区 (2050048-10485759,默认为 2050048): 回车
将使用默认值 2050048
Last 扇区, +扇区 or +size{K,M,G} (2050048-10485759,默认为 10485759):+1000M
分区 2 已设置为 Linux 类型,大小设为 1000 MiB
(这样表示又创建了一个分区)
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分区号 (2-4,默认 3):3
起始 扇区 (2050048-10485759,默认为 2050048): 回车
将使用默认值 2050048
Last 扇区, +扇区 or +size{K,M,G} (2050048-10485759,默认为 10485759):+1000M
分区 3 已设置为 Linux 类型,大小设为 1000 MiB
(这样表示又创建了一个分区)
扩展分区,在最后一列显示为 “Extended”, 接下来继续创建分区:
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): e
分区号 (3,4,默认 3):4
起始 扇区 (8222720-41943039,默认为 8222720):
将使用默认值 8222720
Last 扇区, +扇区 or +size{K,M,G} (8222720-41943039,默认为 41943039):+2000M
分区 4 已设置为 Extended 类型,大小设为 2 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000c7b3b
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 8222719 3905536 82 Linux swap / Solaris
/dev/sda3 12318720 14366719 1024000 83 Linux
/dev/sda4 8222720 12318719 2048000 5 Extended
扩展分区在最后一列显示为Extended,接下来继续创建分区,如下所示:
命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 5
起始 扇区 (8224768-12318719,默认为 8224768):
将使用默认值 8224768
Last 扇区, +扇区 or +size{K,M,G} (8224768-12318719,默认为 12318719):+500M
分区 5 已设置为 Linux 类型,大小设为 500 MiB
命令(输入 m 获取帮助):p
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000c7b3b
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 8222719 3905536 82 Linux swap / Solaris
/dev/sda3 12318720 14366719 1024000 83 Linux
/dev/sda4 8222720 12318719 2048000 5 Extended
/dev/sda5 8224768 9248767 512000 83 Linux
这时候再分区和以前有区别了,不再选择是主分区还是扩展分区了,而是直接定义大小。有一点阿铭要讲一下,当分完三个主分区后,第四个扩展分区需要把剩余的磁盘空间全部划分给扩展分区,不然的话剩余的空间会浪费,因为分完扩展分区后,再划分新的分区时是在已经划分的扩展分区里来分的。其中/dev/sdb4为扩展分区,这个分区是不可以格式化的,你可以把它看成是一个空壳子,能使用的为/dev/sdb5, 其中/dev/sdb5为/dev/sdb4的子分区,这个子分区叫做逻辑分区。如果你发现分区分的不合适,想删除掉某个分区怎么办?这就用到了 ‘d’ 命令:
命令(输入 m 获取帮助):d
分区号 (1-4,默认 4):1
分区 1 已删除
Command (m for help): p
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000c7b3b
设备 Boot Start End Blocks Id System
/dev/sda2 411648 8222719 3905536 82 Linux swap / Solaris
/dev/sda3 12318720 14366719 1024000 83 Linux
/dev/sda4 8222720 12318719 2048000 5 Extended
/dev/sda5 12318720 14366719 1024000 83 Linux
Command (m for help): d
Partition number (1-5): 5
Command (m for help): p
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000c7b3b
设备 Boot Start End Blocks Id System
/dev/sda2 411648 8222719 3905536 82 Linux swap / Solaris
/dev/sda3 12318720 14366719 1024000 83 Linux
/dev/sda4 8222720 12318719 2048000 5 Extended
输入 ‘d’ 会提示要删除哪个分区,可以选择从 1-5 其中1-3是主分区(sdb1, sdb2, sdb3),4是扩展分区(sdb4),5是逻辑分区 [1] (sdb5),如果输入5,则直接把逻辑分区sdb5删除掉,但是如果输入4的话,会把整个扩展分区sdb4干掉,当然也包含扩展分区里面的逻辑分区sdb5。在刚才的分区界面直接 Ctrl + C 退出来,这样刚刚的分区全部都取消了,咱们重新来做分区:
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x5aacb19d
设备 Boot Start End Blocks Id System
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): e
分区号 (1-4,默认 1):1
起始 扇区 (2048-10485759,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-10485759,默认为 10485759):
将使用默认值 10485759
分区 1 已设置为 Extended 类型,大小设为 5 GiB
Command (m for help): p
磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x5aacb19d
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10485759 5241856 5 Extended
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 1 extended, 3 free)
l logical (numbered from 5)
如果把第一个分区分为扩展分区,并且把全部空间都分给扩展分区的话,再继续分区的话,会提示的分区类型为主分区还是逻辑分区(logical), 用 ‘l’ 表示逻辑分区,逻辑分区的id是从5开始的,因为前四个id为主分区或者扩展分区。既然阿铭把所有磁盘空间都分为了扩展分区,如果你在这里选择 ‘p’ 则会报错:
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 1 extended, 3 free)
l logical (numbered from 5)
Select (default p): p
分区号 (2-4,默认 2):2
No free sectors available
这是因为没有足够空间分给主分区了,那我们就分逻辑分区:
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 1 extended, 3 free)
l logical (numbered from 5)
Select (default p): l
添加逻辑分区 5
起始 扇区 (4096-10485759,默认为 4096):
将使用默认值 4096
Last 扇区, +扇区 or +size{K,M,G} (4096-10485759,默认为 10485759):+1000M
分区 5 已设置为 Linux 类型,大小设为 1000 MiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x5aacb19d
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10485759 5241856 5 Extended
/dev/sdb5 4096 2052095 1024000 83 Linux
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 1 extended, 3 free)
l logical (numbered from 5)
Select (default p): l
添加逻辑分区 6
起始 扇区 (2054144-10485759,默认为 2054144):
将使用默认值 2054144
Last 扇区, +扇区 or +size{K,M,G} (2054144-10485759,默认为 10485759):+1000M
分区 6 已设置为 Linux 类型,大小设为 1000 MiB
Command (m for help): p
磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x5aacb19d
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10485759 5241856 5 Extended
/dev/sdb5 4096 2052095 1024000 83 Linux
/dev/sdb6 2054144 4102143 1024000 83 Linux
分区完后,需要输入 ‘w’ 命令来保存我们的配置:
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
再使用 fdisk -l /dev/sdb 查看分区情况:
通过以上操作,相信你也学会了用fdisk来分区了吧。但阿铭要提醒你,不要闲着没事分区玩儿,这操作的危险性是很高的,一不留神就把服务器上的数据全部给分没有了。所以在你执行分区操作的时候,请保持百分之二百的细心,切记切记!
5.格式化磁盘分区
命令 : mke2fs, mkfs.ext2, mkfs.ext3, mkfs.ext4
当用man查询这四个命令的帮助文档时,你会发现我们看到了同一个帮助文档,这说明四个命令是一样的。mke2fs常用的选项有:
‘-b’ 分区时设定每个数据区块占用空间大小,目前支持1024, 2048 以及4096 bytes每个块。
‘-i’ 设定inode的大小
‘-N’ 设定inode数量,有时使用默认的inode数不够用,所以要自定设定inode数量。
‘-c’ 在格式化前先检测一下磁盘是否有问题,加上这个选项后会非常慢
‘-L’ 预设该分区的标签label
‘-j’ 建立ext3格式的分区,如果使用mkfs.ext3 就不用加这个选项了
‘-t’ 用来指定什么类型的文件系统,可以是ext2, ext3 也可以是 ext4.
[root@localhost ~]# mke2fs -t ext4 /dev/sdb5
指定文件系统格式为ext4, 该命令 mkfs -t ext4 /dev/sdb5等同于mkfs.ext4 /dev/sdb5。然而,mke2fs并不支持把分区格式化成xfs类型,而只能使用mkfs.xfs
mke2fs -t xfs /dev/sdb6
Your mke2fs.conf file does not define the xfs filesystem type.
Aborting...
mkfs.xfs /dev/sdb6
在上面的例子中,你是否有注意到一些指标呢?其中一个指标是 “块大小=4096” 这里涉及到一个 “块” 的概念,磁盘在被格式化的时候会预先规定好每一个块的大小,然后再把所有的空间分割成一个一个的小块,存数据的时候也是一个块一个块的去写入。所以如果你的磁盘存的都是特别小特别小的文件,比如说1k或者2k,那么建议在格式化磁盘的时候指定块数值小一点。ext文件系统默认块大小为4096也就是4k. 在格式化的时候,可以指定块大小为1024, 2048, 4096(它们是成倍增加的),虽然格式化的时候可以指定块大小超过4096,但是一旦超过4096则不能正常挂载,如何指定块大小?
mke2fs -t ext4 -b 8192 /dev/sdb5
mkfs.xfs -b size=8912 /dev/sdb6 //重新格式化sdb6时,会提示这个分区 已经格式化过
指定块大小为8192会提示,块值设置太大了,我们直接输入 ‘y’ 强制格式化,你还可以尝试指定更大的数字。
mke2fs -L TEST -t ext4 /dev/sdb5
命令 : e2label
用来查看或修改分区的标签
[root@localhost ~]# e2label /dev/sdb5
TEST
[root@localhost ~]# e2label /dev/sdb5 TEST123
[root@localhost ~]# e2label /dev/sdb5
TEST123
6.挂载/卸载磁盘
在上面的内容中讲到了磁盘的分区和格式化,那么格式化完了后,如何去用它呢?这就涉及到了挂载这块磁盘。格式化后的磁盘其实是一个块设备文件,类型为b,也许你会想,既然这个块文件就是那个分区,那么直接在那个文件中写数据不就写到了那个分区中么?当然不行。
在挂载某个分区前需要先建立一个挂载点,这个挂载点是以目录的形式出现的。一旦把某一个分区挂载到了这个挂载点(目录)下,那么再往这个目录写数据使,则都会写到该分区中。这就需要你注意一下,在挂载该分区前,挂载点(目录)下必须是个空目录。其实目录不为空并不影响所挂载分区的使用,但是一旦挂载上了,那么该目录下以前的东西就不能看到了。只有卸载掉该分区后才能看到。
命令 : mount
如果不加任何选项,直接运行 “mount” 命令,会显示如下信息:
[root@localhost ~]# mount
[root@localhost ~]# mkdir /newdir
[root@localhost ~]# touch /newdir/newfile.txt
[root@localhost ~]# ls /newdir/newfile.txt
/newdir/newfile.txt
然后把刚才格式化的 /dev/sdb5 挂载到 /newdir 上。
[root@localhost ~]# mount /dev/sdb5 /newdir/
[root@localhost ~]# ls /newdir/
[root@localhost ~]# df -h |grep -v tmpfs
mount LABEL=TEST123 /newdir
df -h |grep -v temfs
本例中用到了umount命令,这个命令是用来卸载磁盘分区的,阿铭稍后介绍。
mount命令常用的选项在-a , -t 和 -o 在介绍-a 选项前,我们需要先了解一下/etc/fstab这个文件。
cat /etc/fstab配置文件
[root@localhost ~]# cat /etc/fstab
这个文件是系统启动时,需要挂载的各个分区。第一列就是分区的标识,可以写分区的LABEL,也可以写分区的UUID(等会阿铭会着重讲一下这个概念),当然也可以写分区名(/dev/sda1);第二列是挂载点;第三列是分区的格式;第四列则是mount的一些挂载参数,等下会详细介绍一下有哪些参数,一般情况下,直接写defaults即可;第五列的数字表示是否被dump备份,是的话这里就是1,否则就是0;第六列是开机时是否自检磁盘。1,2都表示检测,0表示不检测,在Redhat/CentOS中,这个1,2还有个说法,/ 分区必须设为1,而且整个fstab中只允许出现一个1,这里有一个优先级的说法。1比2优先级高,所以先检测1,然后再检测2,如果有多个分区需要开机检测那么都设置成2吧,1检测完了后会同时去检测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” : 启动群组磁盘配额模式;
学完这个/etc/fstab后,我们就可以自己修改这个文件,增加一行来挂载新增分区。例如,阿铭增加了这样一行:
LABEL=TEST /newdir ext4 defaults 0 0
然后卸载掉刚才我们已经挂载的/dev/sdb5
[root@localhost ~]# umount /dev/sdb5
[root@localhost ~]# df -h|grep -v tmpfs
使用 df -h 查看已经成功卸载 /dev/sdb5 下面执行命令 mount -a
[root@localhost ~]# mount -a
[root@localhost ~]# df -h|grep -v tmpfs
此时,多出来一个 /dev/sdb5 挂载到了 /newfir 下。这就是 mount -a 命令执行的结果,这个 ‘-a’ 选项会把/etc/fstab中出现的所有磁盘分区挂载上。
‘-t’ 选项用来指定挂载的分区类型,默认不指定会自动识别。
‘-o’ 选项用来指定挂载的分区有哪些特性,即上面 “/etc/fatab” 配置文件中第四列的那些。阿铭经常这样使用这个 ‘-o’ 选项:
[root@localhost ~]# mkdir /newdir/dir1
[root@localhost ~]# mount -o remount,ro,sync /dev/sdb5 /newdir
[root@localhost ~]# mkdir /newdir/dir2
mkdir: 无法创建目录"/newdir/dir2": 只读文件系统
由于指定了 ‘ro’ 参数,所以该分区只读了。通过 mount 命令也可以看到 /dev/sdb5 有 ‘ro’ 选项
mount |grep sdb5
/dev/sdb5 on /newdir type ext4 (rw,relatime,seclabel,data=ordered)
下面阿铭重新挂载,让它恢复读写。
mount -o remount /newdir
mkdir /newdir/dir2
ls /newdir/
命令 : blkid
阿铭在日常的运维工作中遇到过这样的情况,一台服务器上新装了两块磁盘,磁盘a(在服务器上显示为sdc)和磁盘b(在服务器上显示为sdd),有一次把这两块磁盘都拔掉了,然后再重新插上,重启机器,结果磁盘编号调换了,a变成了sdd,b变成了sdc(这是因为把磁盘插错了插槽),问题来了。通过上边的学习,你挂载磁盘是通过/dev/hdb1 这样的分区名字来挂载的,如果先前加入到了/etc/fstab 中,结果系统启动后则会挂载错分区。那么怎么样避免这样的情况发生?
这就用到了UUID,可以通过 blkid 命令获取各分区的UUID:
/dev/sda1: UUID="a593ff68-2db7-4371-8d8c-d936898e9ac9" TYPE="ext4"
/dev/sda2: UUID="ff042a91-b68f-4d64-9759-050c51dc9e8b" TYPE="swap"
/dev/sda3: UUID="95297b81-538d-4d96-870a-de90255b74f5" TYPE="ext4"
/dev/sdb5: LABEL="TEST" UUID="c61117ca-9176-4d0b-be4d-1b0f434359a7" TYPE="ext4"
/dev/sdb6: UUID="c271cb5a-cb46-42f4-9eb4-d2b1a5028e18" SEC_TYPE="ext2" TYPE="ext3"
这样可以获得全部磁盘分区的UUID,如果格式化的时候指定了 LABEL 则该命令也会显示LABEL值,甚至连文件系统类型也会显示。当然这个命令后面也可以指定哪个分区:
[root@localhost ~]# blkid /dev/sdb5
/dev/sdb5: LABEL="TEST" UUID="c61117ca-9176-4d0b-be4d-1b0f434359a7" TYPE="ext4"
获得UUID后,如何使用它呢?
[root@localhost ~]# umount /newdir
[root@localhost ~]# mount UUID="40cbab68-fe68-404b-9bd7-a84541ce4944" /newdir
[root@localhost ~]# df -h
也可以把下面这行写到 /etc/fstab 中
UUID=40cbab68-fe68-404b-9bd7-a84541ce4944 /newdir ext4 defaults 0 0
如果想让某个分区开机后就自动挂载,有两个办法可以实现:
在 /etc/fstab 中添加一行,如上例中那行;
把挂载命令写到 /etc/rc.d/rc.local 文件中去,阿铭会经常把想要开机启动的命令加到这个文件中。系统启动完后会执行这个文件中的命令,所以只要你想开机后运行什么命令统统写入到这个文件下面吧,直接放到最后面即可,阿铭把挂载的命令放到该文件的最后一行了:
[root@localhost ~]# cat /etc/rc.d/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
mount UUID="40cbab68-fe68-404b-9bd7-a84541ce4944" /newdir
以上两种方法,任选其一,阿铭介绍第二种方法其实也是教给你一个小知识,如何让一些操作行为随系统启动而自动执行。另外,阿铭需要给你一个小建议,那就是挂载磁盘分区的时候,尽量使用UUID或者LABEL这两种方法。
命令 : umount
在上面的小实验中,阿铭多次用到这个命令,这个命令也简单的很,后边可以跟挂载点,也可以跟分区名(/dev/hdb1), 但是不可以跟LABEL和UUID.
[root@localhost ~]# umount /dev/sdb5
[root@localhost ~]# mount UUID="40cbab68-fe68-404b-9bd7-a84541ce4944" /newdir
[root@localhost ~]# umount /newdir
[root@localhost ~]# mount UUID="40cbab68-fe68-404b-9bd7-a84541ce4944" /newdir
umount 命令有一个非常有用的选项那就是 ‘-l’, 有时候你会遇到不能卸载的情况:
[root@localhost newdir]# umount /newdir
umount: /newdir: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
这是因为当前目录为要卸载的分区上,解决办法有两种,一是到其他目录,二是使用 ‘-l’ 选项:
[root@localhost newdir]# umount -l /newdir
[root@localhost newdir]# df -h
文件系统 容量 已用 可用 已用%% 挂载点
/dev/sda3 14G 1.5G 12G 11% /
tmpfs 160M 0 160M 0% /dev/shm
/dev/sda1 97M 27M 66M 29% /boot
建立一个swap文件增加虚拟内存
从装系统时就接触过这个swap了,它类似与windows的虚拟内存,分区的时候一般大小为内存的2倍,如果你的内存超过8G,那么你分16G似乎是没有必要了。分16G足够日常交换了。然而,还会有虚拟内存不够用的情况发生。如果真遇到了,莫非还要重新给磁盘分区?当然不能,那我们就增加一个虚拟的磁盘出来。基本的思路就是:建立swapfile -> 格式化为swap格式 -> 启用该虚拟磁盘。
[root@localhost ~]# dd if=/dev/zero of=/tmp/newdisk bs=4k count=1024
记录了102400+0 的读入
记录了102400+0 的写出
419430400字节(419 MB)已复制,2.59193 秒,162 MB/秒
“dd” 这个命令阿铭经常用到,所以请你也要掌握它的使用方法,其实也不难,用 “if” 指定源,基本上除了 “/dev/zero” 外基本上不会写别的,而/dev/zero 是UNIX系统特有的一个文件,它可以提供源源不断的 “0”, 关于它的其他信息请你在网上查一下资料。 “of” 指定目标文件, “bs” 定义块的大小, “count” 定义块的数量,这两个参数的多少决定了目标文件的大小,目标文件大小 = bs x count. 阿铭用dd建了一个大小为400M的文件,然后格式化成swap格式:
[root@localhost ~]# mkswap -f /tmp/newdisk
Setting up swapspace version 1, size = 409596 KiB
no label, UUID=29832cab-04b9-4083-a667-9a5795a5d490
格式化完后,就可以挂载上使用了:
[root@localhost ~]# free -m
total used free shared buffers cached
Mem: 318 314 4 0 5 278
-/+ buffers/cache: 30 288
Swap: 2047 0 2047
[root@localhost ~]# swapon /tmp/newdisk
[root@localhost ~]# free -m
total used free shared buffers cached
Mem: 318 314 4 0 5 278
-/+ buffers/cache: 31 287
Swap: 2447 0 2447
前后对比swap分区多了400M空间。其中 “free” 这个命令用来查看内存使用情况, “-m” 表示以M为单位显示,阿铭会在后面介绍该命令。
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">