存储结构与磁盘管理
5.6 su命令与sudo服务
su命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切换到其他用户
面的su命令与用户名之间有一个减号(-),这意味着完全切换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。
当从root管理员切换到普通用户时是不需要密码验证的,而从普通用户切换成root管理员就需要进行密码验证了
sudo命令用于给普通用户提供额外的权限
使用sudo命令可以给普通用户提供额外的权限来完成原本只有root管理员才能完成的任务,可以限制用户执行指定的命令,记录用户执行过的每一条命令,集中管理用户与权限(/etc/sudoers),以及可以在验证密码后的一段时间无须让用户再次验证密码。
用户没有密码不能使用sudo服务
sudo命令中的可用参数以及作用
参数 作用
-h 列出帮助信息
-l 列出当前用户可执行的命令
-u 用户名或UID值 以指定的用户身份执行命令
-k 清空密码的有效时间,下次执行sudo时需要再次进行密码验证
-b 在后台执行指定的命令
-p 更改询问密码的提示语
可以使用sudo命令提供的visudo命令来配置用户权限
visudo命令用于编辑、配置用户sudo的权限文件,语法格式为“visudo [参数]”。这是一条会自动调用vi编辑器来配置/etc/sudoers权限文件的命令,能够解决多个用户同时修改权限而导致的冲突问题。
[root@linuxprobe ~]# visudo
99 ## Allow root to run any commands anywhere
100 root ALL=(ALL) ALL
101 linuxprobe ALL=(ALL) /usr/bin/cat,/usr/sbin/reboot
可以添加NOPASSWD参数,使得用户下次再执行sudo命令时就不用密码验证
[root@linuxprobe ~]# visudo
99 ## Allow root to run any commands anywhere
100 root ALL=(ALL) ALL
101 linuxprobe ALL=(ALL) NOPASSWD:/usr/bin/cat,/usr/sbin/reboot
写用户可以执行的命令时,需要些命令的绝对路径
多个命令之间用,做间隔
不要讲编辑文件的命令做授权,否则用户可以编辑任何文件
6.1 一切从“/”开始
Linux系统中的一切文件都是从“根”目录(/)开始的,并按照文件系统层次标准(FHS)采用倒树状结构来存放文件,以及定义了常见目录的用途。
目录名称 应放置文件的内容
/boot 开机所需文件—内核、开机菜单以及所需配置文件等
/dev 以文件形式存放任何设备与接口
/etc 配置文件
/home 用户主目录
/bin 存放单用户模式下还可以操作的命令
/lib 开机时用到的函数库,以及/bin与/sbin下面的命令要调用的函数
/sbin 开机过程中需要的命令
/media 用于挂载设备文件的目录
/opt 放置第三方的软件
/root 系统管理员的家目录
/srv 一些网络服务的数据文件目录
/tmp 任何人均可使用的“共享”临时目录
/proc 虚拟文件系统,例如系统内核、进程、外部设备及网络状态等
/usr/local 用户自行安装的软件
/usr/sbin Linux系统开机时不会使用到的软件/命令/脚本
/usr/share 帮助与说明文件,也可放置共享文件
/var 主要存放经常变化的文件,如日志
/lost+found 当文件系统发生错误时,将一些丢失的文件片段存放在这里
管理员才可以执行的命令 /sbin /usr/sbin
普通用户可以执行的命令 /bin /usr/sbin
开机相关 /sbin
开机无关 /bin
/boot保存驱动和引导文件
/etc 系统和服务的配置文件 /etc/fstab /etc/httpd/httpd.conf
/var 网站,日志,数据库,多变的文件
/home/用户名 保存用户家目录
绝对路径与相对路径
绝对路径指的是从根目录(/)开始写起的文件或目录名称,而相对路径则指的是相对于当前路径的写法。
6.2 物理设备的命名规则
udev设备管理器的服务会一直以守护进程的形式运行并侦听内核发出的信号来管理/dev目录下的设备文件
常见的硬件设备及其文件名称
硬件设备 文件名称
IDE设备 /dev/hd[a-d]
SCSI/SATA/U盘 /dev/sd[a-z]
virtio设备 /dev/vd[a-z]
软驱 /dev/fd[0-1]
打印机 /dev/lp[0-15]
光驱 /dev/cdrom
鼠标 /dev/mouse
磁带机 /dev/st0或/dev/ht0
一台主机上可以有多块硬盘,因此系统采用a~z来代表26块不同的硬盘(默认从a开始分配),而且硬盘的分区编号
主分区或扩展分区的编号从1开始,到4结束;
逻辑分区从编号5开始。
/dev/目录中保存的应当是硬件设备文件;其次,sd表示的是存储设备;然后,a表示系统中同类接口中第一个被识别到的设备;最后,5表示这个设备是一个逻辑分区。
sda6 不一定是第六个分区
sda3 不一定是主分区或者逻辑分区
6.3 文件系统与数据资料
用户在硬件存储设备中执行的文件建立、写入、读取、修改、转存与控制等操作都是依靠文件系统来完成的。文件系统的作用是合理规划硬盘,以保证用户正常的使用需求。
最常见的文件系统:Ext2,Ext3,Ext4,XFS
RHEL6的默认文件系统为EXT4
RHEL7/8默认的文件系统为XFS
在拿到一块新的硬盘存储设备后,先需要分区,然后再格式化文件系统,最后才能挂载并正常使用。硬盘的分区操作取决于您的需求和硬盘大小;也可以选择不进行分区,但是必须对硬盘进行格式化处理。
6.4 挂载硬件设备
用户需要使用硬盘设备或分区中的数据时,需要先将其与一个已存在的目录文件进行关联,而这个关联动作就是“挂载”。
mount命令用于挂载文件系统。只需使用mount命令把硬盘设备或分区与一个目录文件进行关联,然后就能在这个目录中看到硬件设备中的数据了。
一次性挂载mount 设备路径 目录
永久挂载 /etc/fstab
mount命令中的参数以及作用
参数 作用
-a 挂载所有在/etc/fstab中定义的文件系统
-t 指定文件系统的类型
如果在工作中要挂载一块网络存储设备,这时推荐用UUID(Universally Unique Identifier,通用唯一识别码)进行挂载操作。UUID是一串用于标识每块独立硬盘的字符串,具有唯一性及稳定性,特别适合用来挂载网络设备。
blkid命令用于显示设备的属性信息,可以使用blkid命令来查询设备UUID
//使用设备名称挂载
[root@linuxprobe ~]# mount /dev/sdb2 /backup
//使用UUID挂载
[root@linuxprobe ~]# mount UUID=478fRb-1pOc-oPXv-fJOS-tTvH-KyBz-VaKwZG /backup
mount挂载后,系统在重启之后就会失效。如果想让硬件设备和目录永久地进行自动关联,就必须把挂载信息按照指定的填写格式“设备文件 挂载目录 格式类型 权限选项 是否备份 是否自检”写入到/etc/fstab文件中。
用于挂载信息的指定填写格式中,各字段所表示的意义
字段 意义
设备文件 一般为设备的路径+设备名称,也可以写唯一识别码(UUID,Universally Unique Identifier)
挂载目录 指定要挂载到的目录,需在挂载前创建好
格式类型 指定文件系统的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此为光盘设备)等
权限选项 若设置为defaults,则默认权限为:rw, suid, dev, exec, auto, nouser, async
是否备份 若为1则开机后使用dump进行磁盘备份,为0则不备份
是否自检 若为1则开机后自动进行磁盘自检,为0则不自检
写入到/etc/fstab文件中的设备信息并不会立即生效,需要使用mount -a参数进行自动挂载:
df命令用于查看已挂载的磁盘空间使用情况,英文全称为“disk free”
在挂载网络设备时在fstab文件挂载信息中加上_netdev参数,加上后系统会等联网成功后再尝试挂载这块网络存储设备
而卸载文件系统则意味不再使用硬件的设备资源。那么卸载操作只需要说明想要取消关联的设备文件或挂载目录的其中一项即可
umount命令用于卸载设备或文件系统,英文全称为“un mount”
如果我们当前就处于设备所挂载的目录,系统会提示该设备繁忙,此时只需要退出到其他目录后再尝试一次就行了。
lsblk命令用于查看已挂载的磁盘的空间使用情况,英文全称为“list block id”
挂载到已经存在文件的文件夹会将文件夹中原始文件隐藏
6.5 添加硬盘设备
fdisk命令用于新建、修改及删除磁盘的分区表信息,英文全称为“format disk”
fdisk命令提供了集添加、删除、转换分区等功能
fdisk命令中的参数以及作用
参数 作用
m 查看全部可用的参数
n 添加新的分区
d 删除某个分区信息
l 列出所有可用的分区类型
t 改变某个分区的类型
p 查看分区表信息
w 保存并退出
q 不保存直接退出
partprobe命令手动将分区信息同步到内核
mkfs命令在Linux系统中用于格式化操作的命令是mkfs。
du命令用查看分区或目录所占用的磁盘容量大小,英文全称为“disk usage”
6.6 添加交换分区
交换(SWAP)分区是一种通过在硬盘中预先划分一定的空间,然后把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其设计目的是为了解决真实物理内存不足的问题。
在生产环境中,交换分区的大小一般为真实物理内存的1.5~2倍
mkswap命令用于对新设备进行交换分区格式化,英文全称为“make swap”
swapon命令用于激活新的交换分区设备,英文全称为“swap on”
6.7 磁盘容量配额
root管理员就需要使用磁盘容量配额服务来限制某位用户或某个用户组针对特定文件夹可以使用的最大硬盘空间或最大文件个数,一旦达到这个最大值就不再允许继续使用。可以使用quota技术进行磁盘容量配额管理,从而限制用户的硬盘可用容量或所能创建的最大文件个数。quota技术还有软限制和硬限制的功能。
软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用。
硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。
RHEL 8系统中已经安装了quota磁盘容量配额服务程序包,但存储设备却默认没有开启对quota技术的支持,此时需要手动编辑配置文件并重启一次系统,让系统中的启动目录(/boot)能够支持quota磁盘配额技术。
[root@linuxprobe ~]# vim /etc/fstab
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults,uquota 1 2
xfs_quota命令用于管理设备的磁盘容量配额,语法格式为“xfs_quota [参数] 配额 文件系统”。
//使用xfs_quota命令来设置用户tom对/boot目录的quota磁盘容量配额。具体的限额控制包括:硬盘使用量的软限制和硬限制分别为3MB和6MB;创建文件数量的软限制和硬限制分别为3个和6个。
[root@linuxprobe ~]# xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 tom' /boot
[root@linuxprobe ~]# xfs_quota -x -c report /boot
User quota on /boot (/dev/sda1)
Blocks
User ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 114964 0 0 00 [--------]
tom 0 3072 6144 00 [--------]
edquota命令用于管理系统的磁盘配额,英文全称为“edit quota”,语法格式为“edquota [参数] 用户名”。edquota命令会调用Vi或Vim编辑器来让root管理员修改要限制的具体细节
edquota命令中可用的参数以及作用
参数 作用
-u 对某个用户进行设置
-g 对某个用户组进行设置
-p 复制原有的规则到新的用户/组
-t 限制宽限期限
[root@linuxprobe ~]# edquota -u tom
Disk quotas for user tom (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/sda1 4096 3072 8192 1 3 6
对iNode进行限制,hard限制全部文件个数和全部文件大小
isoft 软限制
ihard 硬限制
对block进行限制
bsoft
bhard
rhel 7,8中针对XFS系统添加参数为uquota,EXT4为usrquota
针对根目录或启动目录的挂载和卸载推荐使用reboot
针对用户组限制 @用户组
修改soft和hard两组,blocks和iNode为已用
6.8 VDO虚拟数据优化
VDO(Virtual Data Optimize,虚拟数据优化)是一种通过压缩或删除存储设备上的数据来优化存储空间的技术。
VDO技术的关键就是对硬盘内原有的数据进行删重操作,它有点类似于我们平时使用的网盘服务,在第一次正常上传文件时速度特别慢,在第二次上传相同的文件时仅作为一个数据指针,几乎可以达到“秒传”的效果,无须再多占用一份空间,也不用再漫长等待。除了删重操作,VDO技术还可以对日志和数据库进行自动压缩,进一步减少存储浪费的情况。
VDO技术支持本地存储和远程存储,可以作为本地文件系统、iSCSI或Ceph存储下的附加存储层使用。
要始终记得把加密层放到VDO之下
VDO技术不可叠加使用
新添加进来的物理设备就是使用vdo命令来管理的,其中name参数代表新的设备卷的名称;device参数代表由哪块磁盘进行制作;vdoLogicalSize参数代表制作后的设备大小。
[root@linuxprobe ~]# vdo create --name=storage --device=/dev/sdc --vdoLogicalSize=200G
挂载前可以用udevadm settle命令对设备进行一次刷新操作,避免刚才的配置没有生效
vdostats命令查看设备的实际使用情况human-readable参数的作用是将存储容量自动进位
6.9 软硬方式链接
Linux系统中存在软链接和硬链接两种不同的类型。
软链接(soft link):也叫符号链接(symbolic link),仅仅包含所链接文件的名称和路径,很像一个记录地址的标签。当原始文件被删除或移动后,新的链接文件也会随之失效,不能被访问。可以针对文件、目录设置软链接,跨文件系统进行链接也不是问题。从这一点来看,它与Windows系统的“快捷方式”具有一样的性质。用户访问软链接的效果如图6-15所示。
硬链接(hard link):可以将它理解为一个“指向原始文件block的指针”,系统会创建出一个与原来一模一样的inode信息块。所以,硬链接文件与原始文件其实是一模一样的,只是名字不同。每添加一个硬链接,该文件的inode个数就会增加1;而且只有当该文件的inode个数为0时,才算彻底将它删除。换言之,由于硬链接实际上是指向原文件block的指针,因此即便原始文件被删除,依然可以通过硬链接文件来访问。需要注意的是,由于技术的局限性,不能跨分区对目录文件进行硬链接。
ln命令用于创建文件的软硬链接,英文全称为“link”
ln命令中可用的参数以及作用
参数 作用
-s 创建“符号链接”(如果不带-s参数,则默认创建硬链接)
-f 强制创建文件或目录的链接
-i 覆盖前先询问
-v 显示创建链接的过程
使用RAID与LVM磁盘阵列技术
RAID技术通过把多个硬盘设备组合成一个容量更大、安全性更好的磁盘阵列,并把数据切割成多个区段后分别存放在各个不同的物理硬盘设备上,然后利用分散读写技术来提升磁盘阵列整体的性能,同时把多个重要数据的副本同步到不同的物理硬盘设备上,从而起到了非常好的数据冗余备份效果。
RAID 0、RAID 1、RAID 5与RAID 10这4种最常见的方案。
RAID 0、1、5、10方案技术对比
RAID级别 最少硬盘 可用容量 读写性能 安全性 特点
0 2 n n 低 追求最大容量和速度,任何一块盘损坏,数据全部异常。
1 2 n/2 n 高 追求最大安全性,只要阵列组中有一块硬盘可用,数据不受影响。
5 3 n-1 n-1 中 在控制成本的前提下,追求硬盘的最大容量、速度及安全性,允许有一块硬盘异常,数据不受影响。
10 4 n/2 n/2 高 综合RAID1和RAID0的优点,追求硬盘的速度和安全性,允许有一半硬盘异常(不可同组),数据不受影响
1. RAID 0
RAID 0技术能够有效地提升硬盘数据的吞吐速度,但是不具备数据备份和错误修复能力。
数据被分别写入到不同的硬盘设备中,即硬盘A和硬盘B设备会分别保存数据资料,最终实现提升读取、写入速度的效果。
2. RAID 1
它是把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用
写入操作时因硬盘切换带来的开销,因此RAID 1的速度会比RAID 0有微弱地降低。但在读取数据的时候,操作系统可以分别从两块硬盘中读取信息,因此理论读取速度的峰值可以是硬盘数量的倍数。平时只要保证有一块硬盘稳定运行,数据就不会出现损坏的情况,可靠性较高。
因为是在多块硬盘设备中写入了相同的数据,因此硬盘设备的利用率得以下降。
3. RAID 5
RAID5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。RAID 5磁盘阵列中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到除自身以外的其他每一块硬盘设备上。其中任何一设备损坏后不至于出现致命缺陷。
就是RAID 5技术实际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。
4. RAID 10
RAID 10技术是RAID 1+RAID 0技术的一个“组合体”。RAID 10技术需要至少4块硬盘来组建,其中先分别两两制作成RAID 1磁盘阵列,以保证数据的安全性;然后再对两个RAID 1磁盘阵列实施RAID 0技术,进一步提高硬盘设备的读写速度。
RAID 10是先对信息进行分割,然后再两两一组制作镜像。也就是先将RAID 1作为最低级别的组合,然后再使用RAID 0技术将RAID 1磁盘阵列组合到一起,将它们视为“一整块”硬盘。而RAID 01则相反,它是先将硬盘分为两组,然后使用RAID 0作为最低级别的组合,再将这两组RAID 0硬盘通过RAID 1技术组合到一起。
在RAID 10中,任何一块硬盘损坏都不会影响到数据安全性,其余硬盘均会正常运作。但在RAID 01中,只要有任何一块硬盘损坏,最低级别的RAID 0磁盘阵列马上会停止运作