linux系统中一切都是文件,而且一切文件的路径都是从根目录(/)开始的。系统中的根目录和文件名称都是严格区分大小写的,并且文件名中不能包含/符号。
udev设备管理器的服务会自动把硬件设备规范起来;udev设备管理器的服务会一直以守护进程的形式运行并侦听内核发出的信号来管理/dev目录下的设备文件。
一般的硬盘设备都是以“/dev/sd”开头的,编号从a-p,最多16个不同的硬盘。
硬盘的分区编号的规则如下:
3. 主分区或扩展分区的编号从1开始,到4结束。
4. 逻辑分区从编号5开始。
需要注意的点:
用户在硬件存储设备中执行文件的建立、读取、修改、转存和控制操作都是依靠文件系统完成的。文件系统的作用是合理规划硬盘,以保证用户的正常使用需求。
linux系统中常见的文件系统有:
Ext3: Ext3是一种日志文件系统,当系统异常宕机是能够避免文件系统资料丢失,并能自动修复数据的不一致与错误,但当数据量大时会需要很长的时间。
Ext4:Ext3的改进版,是RHEL6的默认文件管理系统,支持存储容量高达1EB。Ext4文件系统能够批量分配block块,从而极大提高了读写效率。
XFS: 是一种高性能的日志文件系统,而且是RHEL7中的默认文件管理系统。优势是:发生以外宕机时可以快速回复可能被破坏的文件,强大的日志功能只用花费极低的计算和存储功能,最大支持18EB。
在使用新的硬盘存储时,需要先分区,再格式化文件系统,最后才能挂载并正常使用。硬盘可以不分区,但是必须格式化才能用。
linux把每个文件的权限与属性记录在inode中,而且每个文件占用一个独立的inode表格,该表格大小为128字节,里面记录如下的信息:
例子:
对于存储文件内容的block块,以4kB的block大小进行存储为例:
[root@RHEL Desktop]# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2
# 第一种方法,使用file
[root@RHEL Desktop]# file -s /dev/sda1
/dev/sda1: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)
#第二种方法,使用mount:
[root@RHEL Desktop]# mount | grep sda1
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
#第三种方法,使用df(Disk Free):
[root@RHEL Desktop]# df -hT |grep sda1
/dev/sda1 xfs 497M 119M 379M 24% /boot
挂载就是将硬盘与某个目录做关联的动作。挂载的目的是:为了能够通过目录使用到相关的硬盘资料的效果。
一个文件夹只能挂载一个硬盘!
mount命令用于挂载文件系统,格式为:mount 文件系统 挂载目录。参数如下:
[root@linuxprobe ~]# mount /dev/sdb2 /backup
上面的挂载是临时的,重启系统则会丢失。如果要长期自动挂载则需要把挂载信息按照指定的填写格式“设备文件 挂载目录 格式类型 权限选项 是否备份 是否自检”写入到/etc/fstab文件中。
例程: 把设备/dev/sdb2永久的挂载到/backup目录。
umount命令用于撤销已经挂载的设备文件,格式为“umount [挂载点/设备文件]”。
例如:卸载/dev/sdb2设备文件:
[root@linuxprobe ~]# umount /dev/sdb2
添加硬盘的思路:先在虚拟机中添加一块新的硬盘存储设备,然后进行分区,格式化,挂载等操作,最后通过检查系统的挂载状态并真实的使用硬盘来验证硬盘设备是否已经成功添加。
注意:添加硬盘必须关机,因为热插拔的原因,容易出现问题。
添加新硬盘步骤省略。
fdisk命令用于管理磁盘分区,格式为:fdisk [磁盘名称] 。它可以添加、删除、转换分区等功能。
partprobe 命令用于手动将分区信息同步到内核,格式为:partprobe。 一般推荐连续两次,效果很好。
mkfs命令用于格式化分区系统。格式为: mkfs.XXX 磁盘分区。
其中mkfs.XXX 可以是:mkfs.ext3 mkfs.fat mkfs.xfs mkfs.ext4 mkfs.vfat 等。
例如将/dev/sdb1格式化为xfs系统。
mkfs.xfs /dev/sdb1
df用于查看挂载之后是否成功的状态,格式为 df -h 。
磁盘分区、格式化、挂载步骤:
1、fdisk /dev/sdb 来尝试管理磁盘sdb.
2、看到提示后输入p来查看硬盘设备内已经有的分区信息。
3、再看到提示后输入n来添加新的分区,输入p或e来选择创建主分区还是扩展分区。
4、输入分区号,在fist sector处直接敲击回车,因为不需要指定起始位置。
5、在last sector处,输入指定该分区的大小,如+2G或+512M。
6、最后可以再次输入p查看分区情况,然后再输入w来保存分区。
7、接着使用mkfs命令来格式化分区。
[root@RHEL Desktop]# fdisk /dev/sdb ## 管理硬盘
Welcome to fdisk (util-linux 2.23.2).
...
Command (m for help): p #查看分区情况
Disk /dev/sdb: 5368 MB, 5368709120 bytes, 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
....
Command (m for help): n #新建分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p #建立主分区
Partition number (1-4, default 1): 1 #指定分区号
First sector (2048-10485759, default 2048): ##直接回车
Last sector, +sectors or +size{K,M,G} (4194304-10485759, default 10485759): +2G ##输入分区大小
Partition 1 of type Linux and of size 2 GiB is set
Command (m for help): p
Disk /dev/sdb: 5368 MB, 5368709120 bytes, 10485760 sectors
...
Device Boot Start End Blocks Id System
/dev/sdb1 4194304 8388607 2097152 83 Linux
Command (m for help): n #新建分区sdb2,主分区,1G
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (2-4, default 2): 2
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-4194303, default 4194303): +1G
Partition 2 of type Linux and of size 1 GiB is set
Command (m for help): n ##新建sdb4,扩展分区,512M。
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): e
Partition number (3,4, default 3): 4
First sector (2099200-10485759, default 2099200):
Using default value 2099200
Last sector, +sectors or +size{K,M,G} (2099200-4194303, default 4194303): +512M
Partition 4 of type Extended and of size 512 MiB is set
Command (m for help): p ##查看分区情况
....
Device Boot Start End Blocks Id System
/dev/sdb1 4194304 8388607 2097152 83 Linux
/dev/sdb2 2048 2099199 1048576 83 Linux
/dev/sdb4 2099200 3147775 524288 5 Extended
Command (m for help): w ##保存分区信息
The partition table has been altered!
...
[root@RHEL Desktop]# partprobe #将分区信息手动同步到内核。推荐连续两次
[root@RHEL Desktop]# partprobe
[root@RHEL Desktop]# mkfs
mkfs mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs
mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat
[root@RHEL Desktop]# mkfs.xfs /dev/sdb1 ##格式化分区
...
[root@RHEL Desktop]# mkfs.ext4 /dev/sdb2
...
Writing superblocks and filesystem accounting information: done
[root@RHEL Desktop]# mkfs.xfs /dev/sdb4
...
mkfs.xfs: Use the -f option to force overwrite.
[root@RHEL Desktop]# file -s /dev/sdb1 ##查看分区系统格式
/dev/sdb1: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)
[root@RHEL Desktop]# file -s /dev/sdb2
/dev/sdb2: Linux rev 1.0 ext4 filesystem data, UUID=5b7b0944-9981-4977-bd82-8af5639845e4 (extents) (64bit) (large files) (huge files)
[root@RHEL Desktop]# file -s /dev/sdb4
/dev/sdb4: x86 boot sector, code offset 0x0
##挂载信息
[root@RHEL Desktop]# mount /dev/sdb1 Share
##查看挂载成功与否状态
[root@RHEL Desktop]# df -h
Filesystem Size Used Avail Use% Mounted on
...
##看到下面这个则表示成功
/dev/sdb1 2.0G 33M 2.0G 2% /root/Desktop/Share
注:
du命令用于查看文件数据占有量,即一个或多个文件占用了多大的磁盘空间,格式为: du [选项] [文件]。
du -sh /Share/ ##查看Share目录下所有文件的占用空间大小。
SWAP(交换)分区是一种通过在硬盘中预先规划一定的空间,然后把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其设计目的是为了解决真实物理内存不足的问题。即SWAP是将一部分硬盘空间临时充当内存来使用,目的是降低物理内存的负载能力。
只有当真实的物理内存耗尽才会调用交换分区的资源。
在生产环境中,交换分区的大小一般是真实内存的1.5~2倍。
mkswap命令用于在一个文件或设备上建立交换分区。格式为:mkswap 文件或目录。
在建立完之后要用sawpon命令开始使用这个交换分区。
swapon命令用于激活Linux中的交换空间。
swapoff命令用于关闭指定的交换空间(包括交换文件和交换分区)。
例程:改变/dev/sdb2的文件格式,然后将其制作成swap。
[root@RHEL Desktop]# free -m
total used free shared buffers cached
Mem: 3939 848 3090 10 0 248
-/+ buffers/cache: 599 3339
Swap: 2047 0 2047 ##old swap size
[root@RHEL Desktop]# mkswap /dev/sdb2
mkswap: /dev/sdb2: warning: wiping old ext4 signature.
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=931cec62-22a5-455c-aa8f-72ab61f08dab
[root@RHEL Desktop]# file -s /dev/sdb2
/dev/sdb2: Linux/i386 swap file (new style), version 1 (4K pages), size 262143 pages, no label, UUID=931cec62-22a5-455c-aa8f-72ab61f08dab
[root@RHEL Desktop]# swapon /dev/sdb2
[root@RHEL Desktop]# free -m
total used free shared buffers cached
Mem: 3939 859 3079 10 0 251
-/+ buffers/cache: 606 3332
Swap: 3071 0 3071 ##new swap size
[root@RHEL Desktop]# swapoff /dev/sdb2 ##off swap
[root@RHEL Desktop]# free -m
total used free shared buffers cached
Mem: 3939 861 3077 10 0 251
-/+ buffers/cache: 608 3330
Swap: 2047 0 2047
如果要让新的交换分区设备在重启之后依然有效,则需要按格式写到fstab中。
[root@RHEL Desktop]# vim /etc/fstab
/dev/sdb2 swap swap defaults 0 0
磁盘容量配额服务是用来限制某位用户或某个用户组针对特定文件夹可以使用的最大硬盘空间或最大文件个数,一旦达到这个最大值就不再允许继续使用。
quota 命令用于显示用户或者工作组的磁盘配额信息。输出信息包含磁盘使用或配额限制。格式为:quota [参数] [用户名]。
参数:
[root@RHEL Desktop]# quota -guvs
查看felix的磁盘限额情况
[root@RHEL Desktop]# quota -uvs felix
磁盘容量配额服务有软限制和硬限制的功能:
[root@RHEL Desktop]# vim /etc/fsta
/dev/mapper/rhel_rhel-root / xfs defaults 1 1
UUID=7900b793-7a09-4f89-855a-906039562f51 /boot xfs defaults,uquota 1 2
[root@RHEL Desktop]# reboot
## reboot finished,use mount commond to check ,and will find usrquota.
[root@RHEL Desktop]# mount | grep boot
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,usrquota)
xfs_quota 命令是一个专门针对xfs文件系统来管理quota磁盘容量配额服务而设计的命令,格式为:xfs_quota [参数] 配额 文件系统。
参数:
#先更改root目录权限
[root@RHEL Desktop]# chmod -Rf o+w /boot
#按下面的格式来设置, 使用limit来限制,命令要用单引号(' ').
[root@RHEL Desktop]# xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 felix' /boot
#查看设置的结果
[root@RHEL Desktop]# xfs_quota -x -c report /boot
User quota on /boot (/dev/sda1)
Blocks
User ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 95348 0 0 00 [--------]
felix 0 3072 6144 00 [--------]
#用户尝试创建
[root@RHEL Desktop]# su - felix
Last login: Sun Sep 15 20:56:38 EDT 2019 on pts/0
#大于限制,报错
[felix@RHEL ~]$ dd if=/dev/zero of=/boot/test.txt bs=8M count=1
dd: error writing ‘/boot/test.txt’: Disk quota exceeded
1+0 records in
0+0 records out
6291456 bytes (6.3 MB) copied, 0.00433282 s, 1.5 GB/s
#小于限制,正常。
[felix@RHEL ~]$ dd if=/dev/zero of=/boot/test.txt bs=5M count=1
1+0 records in
1+0 records out
5242880 bytes (5.2 MB) copied, 0.00399135 s, 1.3 GB/s
[felix@RHEL ~]$ exit
logout
edquota命令用于编辑用户的quota配额限制,格式为 edquota [参数] [用户]。
#更改限制,将hard值改为8192
[root@RHEL Desktop]# edquota -u felix
sk quotas for user felix (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/sda1 8192 3072 8192 1 3 6
[root@RHEL Desktop]# su - felix
Last login: Thu Sep 19 20:55:14 EDT 2019 on pts/0
[felix@RHEL ~]$ dd if=/dev/zero of=/boot/test.txt bs=8M count=1
1+0 records in
1+0 records out
8388608 bytes (8.4 MB) copied, 0.0187356 s, 448 MB/s
linux中有软链接和硬链接两种文件。
ln命令用于创建链接文件,格式为: ln [选项] 目标。
例程:软链接的设置。
[root@RHEL Desktop]# cat test.txt
i love linux.
i love linux.
#创建软链接
[root@RHEL Desktop]# ln -s test.txt readme.txt
[root@RHEL Desktop]# cat readme.txt
i love linux.
i love linux.
[root@RHEL Desktop]# cat test.txt
i love linux.
i love linux.
#查看inode 不会增加,还是1.
[root@RHEL Desktop]# ls -l readme.txt
lrwxrwxrwx. 1 root root 8 Sep 19 21:37 readme.txt -> test.txt
[root@RHEL Desktop]# ls -l test.txt
-rwSrwxrwx+ 1 root root 28 Aug 26 23:51 test.txt
#删除源文件
[root@RHEL Desktop]# rm -f test.txt
#软链接文件的名称还在,但是不能读取内容了
[root@RHEL Desktop]# cat readme.txt
cat: readme.txt: No such file or directory
[root@RHEL Desktop]# ls -l readme.txt
lrwxrwxrwx. 1 root root 8 Sep 19 21:37 readme.txt -> test.txt
[root@RHEL Desktop]# rm -f readme.txt
[root@RHEL Desktop]# ls -l readme.txt
ls: cannot access readme.txt: No such file or directory
例程:创建硬链接。
#创建硬链接
[root@RHEL Desktop]# ln test.sh readme.txt
[root@RHEL Desktop]# ls -l test.sh
-rw-rwxr--+ 2 root root 46 Aug 29 21:02 test.sh
[root@RHEL Desktop]# cat test.sh
#!/bin/bash
#for example by root
pwd
ls -al
[root@RHEL Desktop]# cat readme.txt
#!/bin/bash
#for example by root
pwd
ls -al
#删除源文件
[root@RHEL Desktop]# rm -f test.sh
#硬链接文件还可以被读取
[root@RHEL Desktop]# cat readme.txt
#!/bin/bash
#for example by root
pwd
ls -al
[root@RHEL Desktop]#