本文以CentOS7.x为环境
文章目录
1. Linux的文件和目录
1.1 Linux文件和目录权限
文件拥有者(owner)、群组(group)、其他人(others)三个角色概念。root超级管理员,最为特殊。
- 系统上的账号和一般的使用者,均记录在/etc/passwd文件中;
- 个人密码记录在/etc/shadow文件中;
- 所有组名记录了在/etc/group中。
命令:ls -al 或 ll 的显示结果如下:
①对于文档权限类型中的10个字符,第一个字符表示的是文件的类型,常见的类型及其表示如下表。剩下的9个字符分为三组rwx,对应文件拥有者,同组账号以及非拥有者非同组的其他账号对文件的权限。
类型 | 表示 |
---|---|
d | 目录 |
- | 文件 |
l | 链接 |
b | 可供存储的块设备 |
c | 串行端口设备/字符设备 |
②第七栏对应文件名,若文件名前有『. 』,表示该文件是隐藏文件,单纯使用ls指令将不会显示。
1.2 Linux文件目录属性和权限更改
1.2.1 文件目录的时间属性及权限
对文件:
权限 | 意义 |
---|---|
r (read) | 可读取此一文件的实际内容,如读取文本文件的文字内容等 |
w (write) | 可以编辑、新增或者是修改该文件的内容(但不含删除该文件) |
x (eXecute) | 该文件具有可以被系统执行的权限 |
时间类型 | 说明 |
---|---|
modification time (mtime) |
当该文件的『内容数据』变更时,就会更新这个时间。内容数据指的是文件的内容,而不是文件的属性或权限 |
status time (ctime) |
当该文件的『状态(status)』改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间 |
access time (atime) |
当『该文件的内容被取用』时,就会更新这个读取时间(access)。举例来说,使用cat 去读取/etc/man_db.conf , 就会更新该文件的atime 。 |
对目录:
权限 | 意义 |
---|---|
r (read contents in directory) | 表示具有读取目录结构列表的权限 相当于目录抽屉中的灯光,可以读取目录对应的block中的内容 非显示(如ls)只是对目录中文件进行增删改查有w权限即可,不需r权限 |
w (modify contents of directory) | 建立新的文件与目录 删除已经存在的文件与目录(不论该文件的权限为何) 将已存在的文件或目录进行更名 搬移该目录内的文件、目录位置 注:理解可参考文件系统中目录的inode和block的分配 |
x (access directory) | 用户能否进入该目录成为工作目录,即能否进入该目录 |
-
chgrp :改变文件所属群组;
-
chown :改变文件拥有者;
chown也可以更改文件的群组属性,例如,将initial-setup-ks.cfg的拥有者与群组改为root可输入如下命令:
chown root:root initial-setup-ks.cfg #其中的:可以使用.来代替,为避免混淆,建议使用:
- chmod :改变文件的权限, SUID, SGID, SBIT等等的特性
rwx权限的更改不在赘述,就是2进制对应的421;还有一种更改方式如下:
1.2.2 文件目录的默认权限(umask)
默认权限即预设权限:
umask | 指定目前用户在建立文件或目录时候的权限默认值 |
---|
以umask为022为例:
- 建立文件时:(-rw-rw-rw-)(最大预设666) - (-----w–w-) ==> -rw-r–r--
- 建立目录时:(drwxrwxrwx)(最大预设777) - (d----w–w-) ==> drwxr-xr-x
umask的设定/更改(以更改为002为例):
1.2.3 文件目录的隐藏属性(chattr, lsattr)
①chattr(改变文件/目录的隐藏属性)
注:只能在Ext2/Ext3/Ext4的Linux传统文件系统上面完整生效
常用参数 | 作用 |
---|---|
a | 当设定a之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root才能设定这个属性 |
i | 将文件设定成不能被删除、改名、设定连结’无法写入或新增数据,对系统安全性至关重要,只有root能设定这个属性 |
②lsattr(显示文件/目录的隐藏属性)
1.2.4 文件目录的特殊权限(SUID; SGID; SBIT)
特殊权限 | 说明 |
---|---|
Set UID (-rwsr-xr-x) 4 |
1. SUID 权限仅对二进制程序(binary program)有效 2. 执行者对于该程序需要具有x的可执行权限 3. 本权限仅在执行该程序的过程中有效(run-time) 4. 执行者将具有该程序拥有者(owner) 的权限 E.g.在触发 passwd 后,会取得一个新的进程与PID,该PID 产生时透过SUID 来给予该PID 特殊的权限设定(p726) |
Set GID (-rwx–s–x) 2 |
对文件: 1. SGID 对二进制程序有用 2. 程序执行者对于该程序来说,需具备x的权限 3. 执行者在执行的过程中将会获得该程序群组的支持 对目录: 1. 用户若对于此目录具有r 与x 的权限时,该用户能够进入此目录 2. 用户在此目录下的有效群组(effective group)将会变成该目录的群组 3. 用途:若用户在此目录下具有w 的权限(可以新建文件),则使用者所建立的新文件,该新文件的群组与此目录的群组相同 |
Sticky Bit(SBIT) (drwxrwxrwt) 1 |
只针对目录有效 当用户对于此目录具有w, x 权限,亦即具有写入的权限时; 当用户在该目录下建立文件或目录时,仅有自己与root 才有权力删除该文件 |
- 进行文件特殊权限的设定时,各项特殊权限所代表的数字已由表格给出,在chmod命令中第一位进行特殊权限的设定,例如:
将一个文件权限改为『-rwsr-xr-x』时,由于s 在用户权力中,所以是SUID ,因此, 在原先的755 之前还要加上4,即『chmod 4755 filename 』来设定。 - 若是产生了S或T,表示为空的SUID/SGID/STIB权限。
1.3 Linux文件种类与拓展名
1.3.1 文件种类
文件种类 | 再分类/说明 |
---|---|
正规文件 (regular file) |
纯文本档(ASCII) 二进制文件(binary):可执行文件 数据格式文件(data) |
目录 (directory) |
|
连结档 (link) |
实体(h)连结:是在某个目录下新增一笔档名链接到某inode号码的关连记录 符号(s)连接:相当于win中的快捷方式,其文件内容是目标文件的文件名 创建实体连结文件使用命令 ln 来源文件 目标文件 (不能跨Filesystem; 不能link 目录),标志连结文件是ln -s 来源文件 目标文件 ,特性与实体连结文件相反。 |
设备与装置文件 (device) |
区块(block)设备 字符(character)设备 |
资料接口文件 (sockets) |
用来接收网络数据,第一个属性为[s] |
数据输送文件 (FIFO)队列的概念 |
目的在解决多个程序同时存取一个文件所造成的错误问题,第一个属性为[p] |
1.3.2 文件拓展名
拓展名 | 说明 |
---|---|
*.sh | 脚本或批处理文件(scripts),批处理文件为使用shell 写成的,所以扩展名就编成.sh |
*Z, *.tar, *.tar.gz, *.zip, *.tgz | 经过打包的压缩文件。因压缩软件分别为gunzip, tar 等等,不同的压缩软件对应不同的拓展名 |
*.html, *.php | 网页相关文件,分别代表HTML 语法与PHP 语法的网页文件 |
1.3.3 文件名的限制
- 单一文件或目录的最大容许文件名为255bytes,一个ASCII 英文占用1bytes,则大约可达255个字符长度。若以每个中文字占用2bytes,最大档名就是大约在128 个中文字。
- 在设定Linux底下的文件名时, 最好可以避免以下特殊字符:
此外还有+ -用作选项标识的字符。
1.4 Linux目录配置
1.4.1 Linux目录配置依据——FHS(File Hierarchy Standard)
①目录的四种交互作用的形态
形态 | 说明 |
---|---|
可分享的 | 可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据, 是能够分享给网络上其他主机挂载用的目录 |
不可分享的 | 自己机器上面运作的装置文件或者是与程序有关的socket 文件等, 由于仅与自身机器有关,不适合分享给其他主机 |
不变的 | 有些数据是不会经常变动的,跟随着distribution 而不变动。例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等 |
可变动的 | 经常改变的数据,例如登录文件、一般用户可自行收受的新闻组等 |
②FHS对目录/ /usr /var的要求
- / (root, 根目录):与开机系统有关:
1.所有的目录都是由根目录衍生出来的;
2.根目录与开机/还原/系统修复等动作有关;
3.根目录(/)所在分区槽应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分区槽内,保持根目录越小越好。保证效能较佳的同时,也能保证根目录所在的文件系统不易发生问题。
根目录的子目录 | 应放置的文件内容 |
---|---|
/bin | 系统有很多放置执行文件的目录,但/bin 比较特殊。因为/bin 放置的是在单人维护模式下还能够被操作的指令。 在/bin 底下的指令可以被root 与一般账号所使用,主要有:cat, chmod, chown, date, mv, mkdir,cp, bash 等等常用的指令。 |
/boot | 放置开机会使用到的文件,包括Linux 核心文件以及开机选单与开机所需配置文件等。 Linux kernel 常用的档名为:vmlinuz,如果使用的是grub2 这个开机管理程序, 则还会存在/boot/grub2/目录。 |
/dev | 在Linux 系统上,任何装置与接口设备都是以文件的型态存在于这个目录当中。 只要透过存取这个目录底下的某个文件,就等同与存取某个装置。 比要重要的文件有/dev/null, /dev/zero, /dev/tty,/dev/loop*, /dev/sd*等。 |
/etc | 系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件、 各种服务的启始档等等。一般来说,这个目录下的各文件属性是可以让一般使用者查阅的, 但是只有root有权力修改。FHS建议不要放置可执行文件(binary)在这个目录中。比较重要的文件有/etc/fstab;/etc/passwd;/etc/issue;/etc/opt。 |
/lib | 放置开机时会用到的函数库,以及在/bin或/sbin下的指令呼叫的函式库。该目录中必须存在/llib/modules/:放置可抽换式的核心相关模块(驱动程序)。 |
/media | 放置的就是可移除的装置啦! 包括软盘、光盘、DVD 等等装置都暂时挂载于此。常见的档名有:/media/floppy, /media/cdrom 等等 |
/mnt | 暂时挂载某些额外的装置,一般建议可以放置到这个目录中,与/media用途相同 |
/opt | 放置第三方协力软件的目录,想要自行安装额外的软件(非原本的distribution 提供的),也能够将该软件安装到这里。 不过,以前的Linux 系统中,习惯放置在/usr/local目录下。 |
/run | 早期的 FHS 规定系统开机后所产生的各项信息应该要放置到 /var/run 目录下,新版的 FHS 则规范到/run 底下。 由于 /run 可以使用内存来仿真,因此效能上会好很多。 |
/sbin | Linux 有非常多指令是用来设定系统环境的,这些指令只有root 才能够利用来『设定』系统,其他用户最多只能用来『查询』而已。 放在/sbin 底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。 至于某些服务器软件程序,一般则放置到/usr/sbin/当中。至于本机自行安装的软件所产生的系统执行文件(system binary), 则放置到/usr/local/sbin/当中了。常见的指令包括:fdisk, fsck,ifconfig, mkfs 等等。 |
/srv | srv 可以视为『service』的缩写,是一些网络服务启动之后,这些服务所需要取用的数据目录。 常见的服务例如WWW, FTP 等等。 |
/tmp | 这是让一般用户或者是正在执行的程序暂时放置文件的地方。 |
/usr | 见下面 |
/var | 见下面 |
/home | 系统默认的用户家目录。~:代表当前用户的家目录; ~gavinkuo:代表gavinkuo的家目录 |
/lib</qual/> | 用来存放与 /lib 不同的格式的二进制函式库,例如支持 64 位的 /lib64 函式库等 |
/root | 系统管理员(root)的家目录。之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时, 该目录就能够拥有root 的家目录,所以我们会希望root 的家目录与根目录放置在同一个分区槽中。 |
- /usr (unix software resource):与软件安装/执行有关:
usr 是Unix Software Resource 的缩写, 也就是『Unix 操作系统软件资源』所放置的目录,而不是用户的数据。
- /var (variable):与系统运作过程有关。
1.4.2 目录树(directory tree)
- 目录树的启始点为根目录(/, root);
- 每一个目录不止能使用本地端的partition的文件系统,也可以使用网络上的filesystem 。举例来说, 可以利用Network File System (NFS)服务器挂载某特定目录等;
- 每一个文件在此目录树中的文件名(包含完整路径)都是独一无二的。
目录树的架构:
其中,连结为符号连接档,分别为:
/bin --> /usr/bin | /sbin --> /usr/sbin |
---|---|
/lib --> /usr/lib | /lib64 -->/usr/lib64 |
/var/lock --> /run/lock | /var/run --> /run |
1.5 与文件和目录相关的命令
1.5.1 路径(绝对、相对)和环境变量($PATH)
- 绝对路径:路径的写法一定由根目录/ 写起,例如: /usr/share/doc 这个目录。
- 相对路径:路径的写法不是由/ 写起,例如由/usr/share/doc 要到/usr/share/man底下时,可以写成:『cd …/man』这就是相对路径的写法。相对路径意指相对于目前工作目录的路径。
- 环境变量:
①执行一个指令的时候,系统会依照PATH 的设定去每个PATH 定义的目录下搜寻以该命令为文件名的可执行文件, 如果在 PATH定义的目录中含有多个文件名为该命令的可执行文件,那么先搜寻到的同名指令先被执行;
②PATH(全是大写)这个变量的内容是由一堆目录所组成的,每个目录中间用冒号(:)来隔开, 每个目录有先后顺序之分;
③环境变量的添加命令:[root@study ~]# PATH="${PATH}:/root"
;
④环境变量的查看命令:[root@study ~]# echo $PATH
1.5.2 与目录相关的命令
命令 | 说明 |
---|---|
cd | 变换目录 . 代表此层目录 … 代表上一层目录 - 代表前一个工作目录 ~ 代表『目前用户身份』所在的家目录 ~account 代表 account 这个用户的家目录(account 是个账号名称) |
pwd | 显示当前目录 |
mkdir | 建立一个新的目录 -m :配置文件案的权限,直接设定,不需要看预设权限 (umask) -p :直接将所需的目录(包含上层目录)递归建立起来 |
rmdir | 删除一个空的目录 |
1.5.3 文件和目录浏览相关的命令
命令 | 说明 |
---|---|
ls | ls -al = ll; 常用的-option为:-a; -i; -l; -d |
cp, rm, mv | 复制(保留原属性,复制连接文档等)、删除(慎用-r,最好配合-i使用)与移动(可以文件目录的移动和更名操作) |
basename | 提取出路径中的档名 |
dirname | 提取出路径中的目录名 |
1.5.4 文件内容查阅相关的命令
具体的指令选项使用man 指令
来获取
- cat 由第一行开始显示文件内容(concatenate)*
- tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写
- nl 显示的时候,并输出行号*
- more 一页一页的显示文件内容
- less 与 more 类似,但是比 more 更好的是,他可以往前翻页*
- head 只看头几行
- tail 只看后几行
- od 读取非纯文本文档,将文件的内容以8 进位列出储存值与ASCII 的对照表:
[root@study ~]# od -t oCc /etc/issue
- touch 修改文件时间,创建一个新的文件
- file 观察文件类型
1.5.5 文件搜寻相关的命令
命令 | 说明 |
---|---|
which | 搜寻指令文件,该指令依据PATH环境变量中的路径进行搜寻 -a选项:将所有有PATH目录中找到的指令均列出,而不止第一个被找到的指令名称 |
whereis | 由一些特定的目录中寻找文件文件名,主要针对的时/bin;/sbin目录中的执行档,和/usr/share/man中的man page文件,还有几个特定目录,查找速度较快 -l选项可以将搜寻目录列出 |
locate | 使用方法locate 文件的(部分)名称 ;在建好的数据库/var/lib/mlocate/中寻找数据,搜寻速度快; update指令可以根据/etc/updatedb.conf的设定取搜寻系统硬盘内的文件名,更新/var/lib/mlocate内的数据库,root用户可执行该指令 |
find | 1.可搜寻一段时间内,以前或以后的文件; 2.可搜寻特定使用者或所在组名的文件; 3.可搜寻特定文件权限及名称的文件; 4.还可将搜寻到的内容执行额外的动作:-exec选项 具体如下: |
2. Linux文件系统
文件系统加入操作系统的步骤:磁盘分区---->分区格式化特定文件系统---->挂载在目录树上
对一个文件系统而言,将其与目录树结合的动作成为挂载。挂载点一定是目录,则该目录为该文件系统在整个操作系统中的入口。其中xfs文件系统的最顶层目录的inode一般为128号。
索引式文件系统:extfs家族,xfs
非索引式文件系统:FAT家族,会有存储碎片化的情况,需要进行碎片清理
2.1 Linux支持的文件系统和VFS(Virtual Filesystem Switch)
- 传统文件系统:ext2 / minix / MS-DOS / FAT (用vfat 模块) / iso9660 (光盘)等等;
- 日志式文件系统: ext3 /ext4 / ReiserFS / Windows’ NTFS / IBM’s JFS / SGI’s XFS / ZFS;
- 网络文件系统: NFS / SMBFS
2.1.1 Ext2文件系统
区块群组的内容BG(xfs是(allocation group)AG) | 说明 |
---|---|
data block | Ext2中所支持的blk大小分为1K(最大文件16G)、2K、4K; 对于Ext2,块在格式化时已然固定,且不会再分配; 每个块只能分给一个文件,所以可能会有空间资源的浪费 |
inode table | 记录文件的属性以及该文件实际数据在那些data blk内, ext2大小为128k(ext4和xfs可以设到256k); inode和block对照由12个直接,1个间接,1个双间接和1个3间接,如图7.1.4 |
superblock | 记录整个fs的相关信息,可以使用dumpe2fs -h 装置文件名 命令查看superblock中的内容(对于xfs,使用xfs_info 装置文件名 ) |
Filesystem Description | 描述每个 block group 的开始与结束的block 号码,以及说明每个区段(superblock,bitmap, inodemap, data block) 分别介于哪一个block 号码之间。也能够用dumpe2fs来观察。 |
inode bitmap | 记录使用与未使用的inode号码 |
block bitmap | 记录使用与未使用的block号码 |
对于Ext2文件系统中的目录(directory)而言,其data block中的内容如下:
一个分区(partition)上建置一个文件系统,所以若是规划很大容量的话,使用效率会随长时间的使用文件离散而降低。对此,可以将文件系统中的数据全部复制出来,将该文件系统重新格式化,再将内容复制回去解决该问题。
2.1.2 日志式文件系统(Journaling filesystem)
为解决异常情况下,造成的数据不一致问题,即metadata 的内容与实际数据存放区产生不一致的情况,引入了日志:
- 预备:当系统要写入一个文件时,会先在日志记录区块中纪录某个文件准备要写入的信息;
- 实际写入:开始写入文件的权限与数据;开始更新metadata 的数据;
- 结束:完成数据与metadata 的更新后,在日志记录区块当中完成该文件的纪录;
- ext2/ext3/ext4和xfs均是日志式文件系统,早期的ext2是不具备日志功能的。
2.1.3 xfs文件系统
xfs文件系统与Ext家族的主要区别在于,xfs文件系统运用虚拟化技术对inode/block/meta data等数据进行动态配置,即需要时动态产生,而Ext家族均进行预先规划,导致格式化时间较长,使用不灵活。
相比之下xfs是一个较适合高容量磁盘与巨型文件效能较佳的文件系统。
xfs文件系统在资料分布上分为三个部分:
名称 | 说明 |
---|---|
资料区(data section) | ext 家族一样,包括inode/data block/superblock 等数据,都放置在这个区块,其余除了将Ext家族中的bg概念换为了ag概念其余与Ext中概念互通 |
文件系统活动登录区(log section) | 登录区这个区域主要用来纪录文件系统的变化,其实像是日志区。文件的变化会在这里纪录下来,直到该变化完整的写入到数据区后, 该笔纪录才会被终结 |
实时运作区(realtime section) | 当有文件要被建立时,xfs 会在这个区段里面找一个到数个的extent 区块,将文件放置在这个区块内,等到分配完毕后,再写入到data section 的inode 与block 去。这个 extent 区块的大小得要在格式化的时候就先指定,最小值是4K 最大可到1G。 |
2.1.4 Linux VFS (Virtual Filesystem Switch)
VFS的功能是管理所有的filesystem, 省去自行设定读取文件系统的定义的时间与步骤。整个VFS 可以约略用下图来说明:
2.2 Linux文件系统的操作
2.2.1 查看磁盘与目录的容量
①df指令
②du指令
★2.2.2 磁盘的分区、格式化、检验与挂载
- 使用
part 设备名称 print
来查询硬盘的分区表格式; - MBR分区格式使用
fdisk 设备名称
进行分区,GPT分区格式使用gdisk 设备名称
进行分区,分区后使用partprobe
对分区表进行更新,否则lsblk
命令找不到该新分区; - 使用
mkfs
指令来格式化分区/建置文件系统,有mkfs.xfs
,mkfs.ext4
等 - (选做)使用
xfs_repair
或fsck.ext
4对xfs/EXT4文件系统进行,在进行检验时,应当将文件系统解挂载; - 先使用
blkid
命令,找出已建置的文件系统的label或UUID,再使用mount
或umount
将文件系统挂载在目录树中的某一目录(挂载点)上,其中挂载的目录要求如下表; - 设定开机挂载,修改
/etc/fstab
文件,以更新/etc/mtab
,然后由mount -a
命令进行测试,防止文件写错导致开机异常,若发生错误,使用mount -n -o remount,rw /
对根目录重新挂载,以修改/etc/fstab
注:可以使用loop镜像文件建置swap供操作系统使用,free
指令查看系统的swap情况,swapon 装置名称
进行swap挂载,swapoff 装置名称
卸除swap.
单一文件系统不应该被重复挂载在不同的挂载点(目录)中 |
---|
单一目录不应该重复挂载多个文件系统 |
要作为挂载点的目录,理论上应该都是空目录才是 |
2.3 RAID独立冗余磁盘阵列
RAID(Redundant Arrays of Inexpensive Disks),可将多个较小的磁盘整合成一个较大的磁盘,有存储和数据保护的功能。
2.3.1 RAID的等级level
- RAID-0(等量模式,stripe):效能最佳,磁盘数越多效能会越好,因为每个磁盘的读写量会变少,但是若其中一个磁盘损毁,则文件就不可用了。此外组成RAID的磁盘容量相同最佳,否则小容量磁盘满后效能会下降。
- RAID-1(映像模式,mirror):完整备份,也即让同一份数据,完整的保存在两颗磁盘上头,因此,整体RAID 的容量几乎少了50%。RAID-1 最大的优点在于数据的备份,不过由于磁盘容量有一半用在备份,因此总容量会是全部磁盘容量的一半而已,而且写入效果较差。
- RAID 1+0,RAID 0+1:RAID 1+0 就是: (1)先让两颗磁盘组成RAID 1,并且这样的设定共有两组; (2)将这两组RAID 1 再组成一组RAID 0。反过来,RAID 0+1 就是先组成RAID-0 再组成RAID-1。
- RAID-5:对效能与数据备份有着均衡的考虑,至少需要三颗以上磁盘才能组成。写入状况类似RAID-0,但在每个循环的写入过程中(striping),在每颗磁盘中还加入一个同位检查数据(Parity),这个数据会记录其他磁盘的备份数据,用于数据救援。由于有同位检查码,因此 RAID 5 的总容量会是整体磁盘数量减一颗。以上图为例, 原本的 3 颗磁盘只会剩下(3-1)=2 颗磁盘的容量。而且当损毁的磁盘数量大于等于两颗时,这整组RAID 5 的资料就损毁了。因为 RAID 5 预设仅能支持一颗磁盘的损毁情况。
- RAID 6 :其是在RAID-5的基础上发展的,使用两颗磁盘的容量作为parity 的储存,因此整体的磁盘容量就会少两颗,但允许出错的磁盘数量可达到两颗了。
- Spare Disk预备磁盘:其让系统可以实时的在坏掉硬盘时主动的重建。
2.3.2 RAID的优点和等级对比
- RAID优点:
- 数据安全与可靠性:指的并非网络信息安全,而是当硬件(指磁盘) 损毁时,数据是否还能够安全的救援或
使用之意; - 读写效能:例如RAID 0 可以加强读写效能,让你的系统I/O 部分得以改善;
- 容量:可以让多颗磁盘组合起来,故单一文件系统可以有相当大的容量。
- 等级对比:
2.3.3 RAID的种类及实操
- 分为硬件磁盘阵列(hard RAID) 和 软件磁盘阵列(software RAID),硬件高效但成本高,软件相对低廉,但是成本低,其主要是 透过软件来进行仿真数组的任务,会损耗系统资源。CentOS提供的软件磁盘阵列软件为
mdadm
,软件以partition和disk为磁盘的单位,且支持0/1/5/sparse disk等级的RAID。由于软件磁盘阵列则是系统仿真的,所以使用的装置文件名是系统的装置文件, 文件名为/dev/md0, /dev/md1
…。 - 实操:
①建置分区槽。(其中分区槽的代码是FD00:Linux RAID)
②建置之后,可在/proc/mdstat当中查看磁盘阵列的状态:
③然后对RAID进行文件系统格式化,再进行挂载(需要注意的是su=chunk容量,sw=RAID磁盘数,extsize=sw*su)
④上述完毕再进行开机自动挂载的设置,对于/etc/mdadm.conf当中的md0装置信息:ARRAY /dev/md0 UUID=2256da5f:4870775e:cf2fe320:4dfabbc6
,则在/etc/fstab当中添加UUID=494cb3e1-5659-4efc-873d-d0758baec523 /srv/raid xfs defaults 0 0
⑤若需关闭,解除挂载,注释或删除/etc/fstab中内容后,需要使用dd if=/dev/zero of=...
指令将原有的分区槽格式化掉,否则保留的相关数据将会在重启重新建立磁盘阵列。
⑥对于RAID的错误救援,使用指令:
3.文件与文件系统的压缩,打包和备份
3.1 Linux常见的压缩和打包指令
文件后缀 | 文件格式 |
---|---|
*.Z | compress 程序(已过时)压缩的文件 |
*.zip | zip 程序压缩的文件 |
*.gz | gzip 程序压缩的文件-c :将压缩的数据输出到屏幕上,可透过数据流重导向来处理; -d :解压缩的参数; -t :可以用来检验一个压缩文件的一致性~看看文件有无错误; -v :可以显示出原文件/压缩文件案的压缩比等信息; -# :# 为数字的意思,代表压缩等级,-1 最快,压缩比最差、-9 最慢,压缩比最好,预设是 -6. |
*.bz2 | bzip2 程序压缩的文件-c :将压缩的过程产生的数据输出到屏幕上; E.g. bzip2 -9 -c services > services.bz2 ;-d :解压缩的参数 -k :保留源文件,而不会删除原始的文件; -z :压缩的参数 (默认值,可以不加); -v :可以显示出原文件/压缩文件案的压缩比等信息; -# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快. |
*.xz | xz 程序压缩的文件-d :解压缩; -t :测试压缩文件的完整性,看有没有错误; -l :列出压缩文件的相关信息; -k :保留原本的文件不删除; -c :同样的,就是将数据由屏幕上输出; -# :同样的,也有较佳的压缩比的意思. |
*.tar | tar 程序打包的数据,并没有压缩过tar :将多个文件或目录包成一个大文件的指令主要命令: 1.压缩: tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称 2.查询: tar -jtv -f filename.tar.bz2 3.解压缩: tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录 选项与参数: -c :建立打包文件,可搭配 -v 来察看过程中被打包的档名(filename); -t :察看打包文件的内容含有哪些档名,重点在察看『档名』就是了; -x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开; 特别留意的是, -c, -t, -x 不可同时出现在一串指令列中 -z :透过 gzip 的支持进行压缩/解压缩:此时档名最好为 *.tar.gz; -j :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2; -J :透过 xz 的支持进行压缩/解压缩:此时档名最好为 *.tar.xz; 特别留意, -z, -j, -J 不可以同时出现在一串指令列中 -v :在压缩/解压缩的过程中,将正在处理的文件名显示出来! -f filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项啰!(比较不会忘记) -C 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。 -p(小写) :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件 -P(大写) :保留绝对路径,亦即允许备份数据中含有根目录存在之意; –exclude=FILE:在压缩的过程中,不要将 FILE 打包; tar -jcv -f /root/etc.newer.then.passwd.tar.bz2 --newer-mtime="2020/09/10" :将这个日期之前的在/etc/中的文件打包压缩成etc.newer.then.passwd.tar.bz2 |
*.tar.gz | tar 程序打包的文件,其中并且经过 gzip 的压缩 |
*.tar.bz2 | tar 程序打包的文件,其中并且经过 bzip2 的压缩 |
*.tar.xz | tar 程序打包的文件,其中并且经过 xz 的压缩 |
- zcat/zmore/zless 则可以对应于cat/more/less 的方式来读取纯文本档被压缩后的压缩文件;
- zgrep可在.gz文件中找出相应的关键词的行号,e.g.
zgrep -n 'http' services.gz
- 同样的有bzcat/bzmore/bzless/bzgrep;xzcat/xzmore/xzless/xzgrep
- 若仅仅是使用tar指令对文件或目录进行打包称为tarfile,若是还进行了压缩,称为tarball
- tar指令可以透过标准输入输出的数据流重导向,以及管线命令方式,将待处理的文件一边打包一边解压缩到当前目录中。E.g.
tar -cvf - /etc | tar -xvf -
3.2 XFS文件系统的备份和还原
3.2.1 xfsdump指令
- xfsdump 不支持没有挂载的文件系统备份,所以只能备份已挂载的;
- xfsdump 必须使用root 的权限才能操作(涉及文件系统的关系);
- xfsdump 只能备份XFS 文件系统;
- xfsdump 备份下来的数据(文件或储存媒体) 只能让xfsrestore 解析;
- xfsdump 是透过文件系统的UUID 来分辨各个备份档的,因此不能备份两个具有相同UUID 的文件系统;
3.2.2 xfsrestore指令
备份文件的目的是在需要是恢复系统的重要数据,有备份就要学会如何恢复。xfs文件系统的恢复备份的指令是xfsrestore。
3.3 光盘写入指令
3.3.1 mkisofs建立映像文件指令
3.4 其他常见压缩与备份工具
3.4.1 dd指令
dd
可以读取磁盘装置的内容(几乎是直接读取扇区"sector"),然后将整个装置备份成一个文件。
由dd复制出来的文件将原本旧的 partition 上面,将sector 表面的数据整个复制过来,其中连同 superblock, boot sector, meta data 等。所以不需要分区与格式化,只需使用xfs_repair
指令清除原fs中的log,再分配给一个新的uuid,挂载到目录树当中即可,为使得复制得到的新的fs能够利用磁盘的其他空间,再使用xfs_growfs
指令 (LVM扩容当中有详细介绍) 对文件系统进行扩容。
3.4.2 cpio指令
3.5 LVM (Logical Volume Manager)逻辑卷管理
相较于RAID强调数据存取效能和保全,LVM能够弹性的调整文件系统的大小。LVM可以整合多个实体partition分区槽,变成逻辑上的一个磁盘,且能够根据需要在线新增或移除其他的partition到这个LVM抽象出的磁盘中。
数据写入LVM当中时,有两种写入机制,一种是线性模式(linear),即将lvm中的一个分区槽写满之后再写入另一个分区槽;另一种是交错模式(triped),即将数据拆分为多个部分,分别写入同样多个分区槽,类似于RAID0的写入方式,理论上的读写效率要高一些。但是lvm并不强调效能和备份,所以还是使用线性模式多一些。
3.5.1 LVM相关术语
- Physical Volume, PV, 实体滚动条
实际的 partition (或Disk) 需要调整系统标识符(system ID) 成为8E00 (LVM 的标识符),然后再经过pvcreate 的指令将他转成LVM 最底层的实体滚动条(PV) ,之后才能够将这些PV 加以利用! 调整 system ID 的方是就是透过gdisk(GPT分区格式)。 可以认为将LVM分区格式化为PV后,即将实体分区槽划分为了众多的PE? - Physical Extent, PE, 实体范围区块
LVM预设使用4MB的PE区块,在32位的linux中,最多仅含65534个(lvm1设定)PE,因此预设的LVM的LV最大容量为4M*65534=256G。PE是整个LVM最小的存储区块,类似于filesystem当中的block。在lvm2中,该容量限制就不存在了。 - Volume Group, VG, 滚动条群组
LVM抽象出的磁盘就是由PV整合得到的VG。VG的大小与PE还有LVM的version有关。
- Logical Volume, LV, 逻辑滚动条
VG最终还是要切分为LV,LV最后可以格式化使用,类似partition分区槽。LV的大小与PE的大小和PE的数量有关。LV装置名通常指定为/dev/vgname/lvname
的样式。如上图所示,弹性大小的实现就是LV将其所在VG中的未使用的PE划归到该LV当中,若是想要设定的LV大小超过了VG的大小,就只能扩充VG的大小了。
3.5.2 LVM创建、扩容、关闭和删除流程
相关指令如下:
- 对于放大LV容量,需要满足:①VG当中有剩余的容量;或②LV可以产生更多的可用容量;在文件系统中增减文件系统的大小是增减block group的方法,利用xfs_growfs指令,新增的文件系统容量在新增的部分进行格式化,原文件系统没有变化,再将新增的格式化过的数据,反馈回原本的superblock当中,即完成了文件系统的扩容。
- LVM thin Volume可以让LVM动态自动调整磁盘使用率,针对需要大磁盘容量,但磁盘使用率很低的任务很有效。也就是在能保证任务对磁盘资源的使用需要的前提下磁盘实际容量不能满足任务要求时可以虚拟出磁盘有更多的容量。其思想为实际用多少容量才分配给LV的LVM Thin Volume功能,该功能的概念为,先建立一个可以实支实付、用多少容量才分配实际写入多少容量的磁盘容量储存池(thin pool), 然后再由这个 thin pool 去产生一个指定要固定容量大小的LV 装置。实际上,真的可用容量就是实际的磁盘储存池内的容量,若突破该容量,会造成资料受损。
- LVM的LV磁盘快照,快照就是将当时的系统信息记录下来,若有任何资料更动了,则原始资料会被搬移到快照区,没有被更动的区域则由快照区与文件系统共享。快照区与被快照的LV 必须要在同一个VG 上头。不推荐使用thin pool功能制作快照。快照的创建,使用
lvcreate -s
命令,将VG当中的剩余容量都划归给快照区即可。挂载快照区时,使用mount -0 nouuid选项,因为两个文件系统uuid相同,让文件系统忽略该问题,之后,使用df -Th命令查看快照fs和被快照fs会发现两者相同。 快照的应用:①利用其复原系统;②利用快照区进行各项练习与测试的任务,再以原系统还原快照。