Linux学习----基础篇(磁盘管理、文件系统选择及NFS)
1、磁盘管理
1.1、MBR与GPT
MBR(Master Boot Record):磁盘主引导记录。由三部分组成,主引导程序(boot loader),446字节;分区表项(Disk Partition Table,DPT),负责说明磁盘上的分区情况,64字节;结束标志(Magic Number),2字节,固定为55AA。。
GPT(GUID Partition Table):全局唯一标识分区列表,是一个物理硬盘的分区结构。它用来替代BIOS中的主引导记录分区表(MBR)。
MBR由传统的BIOS支出,而GPT则由UEFI支持。
MBR由于分区表只有64字节大小,所以只能有四个表项,表现为硬盘只能有4个主分区,如果需要超过4个分区,则必须使用3个主分区加一个扩展分区,在扩展分区中使用逻辑分区;几乎所有的操作系统都支持MBR;MBR支持32位和64位操作系统;MBR无法识别大于2T的分区,也无法支持大于2T的硬盘。
GPT没有4个主分区的限制,对分区的数量无限制;GPT可管理最大18EB的硬盘;要使用GPT作为启动盘,需要UEFI主板和操作系统的支持;GPT只支持64位操作系统。
UEFI的目标是取代传统BIOS,它不支持MBR,仅支持GPT。不过,近年出现的UEFI主板,采用UEFI+BIOS共存模式,并且BIOS中集成UEFI启动项。
1.2、使用fdisk工具对磁盘进行分区
fdisk是Linux下一款功能强大的磁盘分区管理工具,可以查看磁盘的使用情况,也可以对磁盘进行分区。fdisk仅支持MBR,不支持GPT,若要对GPT进行分区需要使用parted工具。
fdisk分为两个部分,查询模式和交互模式。使用命令fdisk –l可查看分区状况,使用命令fdisk 磁盘设备可进入交互操作模式。
交互操作模式下的常用命令如下:
- d:删除一个分区
- l :查看支持的磁盘分区类型
- m:显示fdisk每个交互命令的详细含义
- n:增加一个新的分区
- p:显示分区信息
- q:不保存退出
- t:改变分区类型
- w:保存退出
注意:在使用fdisk工具完成分区后,需要使用mkfs.命令将分区格式化之后才可以挂载使用,mkfs.命令语法如下:
mkfs.文件系统类型 分区
例如,将/dev/sdb1分区格式化成xfs类型,可以使用以下命令:
[root@localhost ~]# mkfs.xfs /dev/sdb1
在未添加硬盘前使用fdisk –l查看分区信息:
添加一个15GB的硬盘后使用fdisk –l查看分区信息(新添加的磁盘见红框处):
使用fdisk /dev/sdb命令进入交互模式:
先输入p查看该磁盘的分区信息:
从返回的信息可以看到该磁盘尚未分区,此时先输入n创建一个10GB大小的分区:
fdisk工具提示创建主分区或者是扩展分区,这里会显示已经创建了几个主分区及扩展分区,输入p创建一个主分区:
提示输入分区号,fdisk工具会显示可以使用的分区号,这里我们输入1:
提示输入起始扇区,这里从头开始,即输入2048:
提示输入结束扇区,fdisk工具给出提示这里可以接受的参数,我们要划分的分区大小为10GB,这里可以输入+10G:
显示我们创建的分区信息,此时使用p查看该磁盘的分区信息:
此时已经可以看到我们划分的10GB的分区了,重复上面的动作继续划分一个大小为5GB的分区,然后使用p查看该磁盘的分区信息:
完成分区后,使用w保存退出fdisk工具:
此时使用fdisk –l命令查看磁盘信息(红框处):
分区完成后,我们使用mkfs命令将/dev/sdb1格式化成xfs类型,/dev/sdb2格式化成ext4类型,然后使用mount命令将/dev/sdb1挂载到/data1、/dev/sdb2挂载到/data2,挂载完成后使用df -Th命令查看分区挂载信息(注意红框处信息):
至此,分区结束。
1.3、使用parted工具对磁盘进行分区
由于fdisk工具只支持MBR,不支持GPT,所以fdisk只能对不大于2TB的硬盘进行分区,大于2TB的硬盘或者GPT的硬盘就需要使用parted工具进行分区。
parted工具也分为查询模式和交互模式,使用parted –l查看磁盘及分区信息,使用parted 磁盘设备可以进入交互模式,常用的交互命令如下:
- mklabel:创建分区表,设置磁盘使用MBR(parted下表示为msdos)或GPT。例如:mklable gpt
- mkpart:创建新分区,命令格式为mkpart 分区类型 [文件系统类型] 起始位置 结束位置。其中,分区类型主要有primary(主分区)、extended(扩展分区)、logical(逻辑分区);文件系统类型有FAT32、ext3、ext4等
- print:输出分区信息,可简写为p。该命令有三个选项,选项free显示该磁盘的所以信息,并显示磁盘剩余空间;number显示指定分区的信息,如print 1;all或list显示所以磁盘信息
- rm:删除分区
- select:选择硬盘。输入parted命令进入交互模式时,默认使用的是第一块硬盘,如果需要使用其他硬盘可使用该命令进行切换。
- quit:退出parted(parted会自动保存对硬盘的修改)
一个例子:使用parted工具对新添加的一块15GB硬盘进行分区,使用GPT格式,并划分一个10GB大小和一个5GB大小的分区。
使用parted -l查看磁盘及分区信息(注意红框处):
使用parted /dev/sdb命令进入交互模式:
该磁盘使用GPT,输入命令mklabel gpt:
parted工具的警告,提示改变该磁盘的格式会使数据全部丢失,是否继续,这里输入yes,之后输入print查看该磁盘的信息(注意红框处):
磁盘已经改变成为GPT格式,接下去输入mkpart primary 0G 10G(这里不指定文件系统类型,等分区完成后使用mkfs命令格式化):
输入命令print查看分区情况:
此时可以看到10GB的分区已经创建完毕,接下去重复上面的动作创建一个5GB的分区,创建完成后使用命令print查看分区信息:
两个分区已经创建,接下去使用mkfs格式化后使用mount挂载即可使用。
1.4、LVM逻辑卷管理
LVM,Logical Volume Manage,逻辑卷管理。是Linux下对磁盘分区进行管理的一种机制,LVM是建立在磁盘分区和文件系统之间的一个逻辑层,管理员利用LVM可以在磁盘不用重新分区的情况下动态调整分区大小。如果系统新增了一块硬盘,通过LVM即可将新增的硬盘空间直接扩展到原来的磁盘分区上。
LVM有以下几个概念:
- 物理存储设备(physical media):存储设备文件,如/dev/sda等
- PV(physical volume):物理卷
- VG(Volume Group):卷组
- LV(logical volume):逻辑卷
- PE(physical extent):PV中可以分配的最小存储单元
- LE(logical extent):LV中可以分配的最小存储单元
它们之间的关系如下图所示:
要使用LVM,系统中需要安装以下软件包:
lvm2 lvm2-libs e2fsprogs e2fsprogs-libs xfsprogs
创建LVM:
- 对磁盘进行分区
- 创建物理卷:使用命令pvcreate 分区将指定的分区创建成PV,使用命令pvdisplay可以查看PV的信息
- 创建卷组:使用命令vgcreate 卷组名称 PV分区将指定的PV创建加入卷组,使用命令vgdisplay可以查看卷组信息
- 激活卷组:使用命令vgchange –a y 卷组名激活指定的卷组
- 创建逻辑卷:使用命令lvcreate –L 容量大小|-l PE数量 –n 逻辑卷名称 卷组创建逻辑卷,使用命令lvdisplay可以查看逻辑卷信息
- 使用命令mkfs.文件系统类型 /dev/卷组/逻辑卷格式化逻辑卷
- 使用mount挂载逻辑卷
卷组的扩展:
使用命令vgextend 卷组名 PV分区扩展卷组
逻辑卷的扩展:
使用命令lvextend –l +PE数量|-L +容量大小 逻辑卷路径扩展逻辑卷
删除LVM:
- 卸载逻辑卷对应的分区
- 删除逻辑卷:使用命令lvremove 逻辑卷路径删除逻辑卷
- 删除卷组:使用命令vgremove 卷组删除卷组
- 删除物理卷:使用命令pvremove PV分区删除物理卷
额外的:
使用命令xfs_growfs 挂载点可以在线扩展xfs分区;使用命令resize2fs 设备名可以在线扩展ext4分区。
一个创建LVM的例子:添加两块15GB大小的硬盘,一块划分成10GB大小和5GB大小的两个分区,另一块划分成10GB大小的一个分区,将这三个分区创建成PV,并加入到名为VG1的卷组中,VG1卷组中分别创建大小为15GB和9GB的LV,15GB大小的LV挂载到/data1,9GB大小的LV挂载到/data2
使用fdisk工具对两块硬盘进行分区,分区后的结果如下:
使用pvcreate将/dev/sdb1、/dev/sdb2和/dev/sdc1创建成PV:
通过pvdisplay命令可以看到新创建的三个PV:
使用vgcreate命令创建卷组VG1,并将刚才创建的三个PV加入该卷组:
使用vgdisplay命令查看刚创建的VG1:
使用命令vgchange激活VG1:
在卷组中分别创建大小为15GB和9GB的两个LV:
格式化这两个LV:
使用mount挂载这两个LV,然后使用df –Th命令查看挂载后的结果:
可以看到两个LV已经挂载完成,至此LVM的创建已完成。
扩展卷组及逻辑卷的一个例子:将/dev/sdc剩下的5GB空间分区,并将其加入卷组VG1,逻辑卷LV2扩展5GB的空间
使用vgdisplay命令查看VG1的信息:
注意Free PE栏的信息,该栏为VG1的剩余空间。使用vgextend命令将/dev/sdc2加入到卷组VG1中:
使用vgdisplay命令查看扩展后的VG1信息,注意Free PE栏:
使用lvdisplay命令查看逻辑卷LV2的信息,注意LV Size栏的信息:
使用lvextend命令为逻辑卷LV2扩展5GB大小的空间:
使用lvdisplay命令查看逻辑卷LV2的信息,此时LV Size的值已经扩大了:
至此,扩展卷组和逻辑卷完成。
2、生产环境文件系统选择
Linux下常见的的文件系统有DOS文件系统msdos,Windows下的FAT和NTFS,光盘文件系统ISO-9660,单一文件系统ext2和日志文件系统ext3、ext4、xfs,集群文件系统gfs(Red Hat Global File System)、ocfs2(oracle cluster File System)、虚拟文件系统(如 /proc),网络文件系统(NFS)。
对于读操作频繁,同时小文件众多的环境,使用ext4文件系统是个不错的选择。由于ext3的目录结构是线型的,因此当一个目录下文件的数量较多时,ext3的性能下降比较厉害,而ext4的延迟分配、多块分配和盘区功能使ext4适合对大量小文件的操作。大量实践证明,如果生产环境需要对文件进行大量的创建和删除操作的话,ext4是更高效的文件系统,接下来依次是xfs、ext3。例如网站应用,邮件系统等,都可使用ext4文件系统来达到最优性能。
对于写操作频繁的环境,如果是一些大数据文件操作,同时应用本身需要大量的写日志操作,那么xfs是最佳的选择。根据实际应用经验,对xfs、ext4、ext3块写入性能对比,整体上性能差不多,但在效率上(CPU利用率)最好的是xfs,接下来依次是ext4和ext3。
对性能要求不高、数据安全要求不高的环境,ext3/ext2文件系统是比较好的选择,因为ext2没有日志记录功能,这样就节省了很多磁盘性能。例如linux系统下的/tmp分区就可以采用ext2文件系统。
3、网络文件系统NFS
3.1、什么是NFS
NFS,Network File System,网络文件系统。它允许网络上的不同操作系统通过TCP/IP网络共享数据。使用NFS,首先在服务端共享出文件或目录,然后客户端将共享的文件或目录挂载到本地,这样在客户端上就可以很方便的使用服务端提供的文件,实现数据共享。
3.2、NFS服务端配置
NFS服务端的运行需要以下的软件包支持:
rpcbind
nfs-utils
确定安装好需要的软件包后,需要启动rpc服务和NFS服务,使用以下命令启动这两个服务:
systemctl start rpcbind
systemctl start nfs
可以使用以下命令查看所需的服务的运行状况:
systemctl status rpcbind
systemctl status nfs
/etc/exports文件为NFS服务端的配置文件,文件默认为空,该文件的格式为:
共享路径 客户端地址(选项)
- 共享路径:服务端上共享出来以供客户端使用的目录
- 客户端地址:允许访问服务端资源的客户端,可以是IP地址、主机名或域名,支持匹配
- 选项:ro,read only,客户端对共享资源只有读的权限;rw,read write,客户端对共享资源有读写权限;no_root_squash,信任客户端root用户,即如果登录的客户端用户为root,那么此用户拥有共享资源的最高权限;root_squash,不信任客户端root用户,即如果登录的客户端用户为root,那么该用户将被映射成nfsnobody,对于共享资源只有只读权限;all_squash,不管客户端登录的是什么用户,都将被映射成nfsnobody;no_all_squash,默认值,只有当客户端用户的UID和GID与服务端共享文件的UID和GID相同时,才对该文件有读写权限;sync,默认值,资料同步写入磁盘;async,资料暂时存放在内存,不写入磁盘
一个例子:服务端共享/mnt目录,允许客户端192.168.0.23登录并将登录的所有用户映射成nfsnobody,客户端对该目录只有只读的权限
在/etc/exports中做如下配置:
/mnt 192.168.0.23(ro,all_squash)
在完成/etc/exports文件的配置后,使用以下命令可以使配置立即生效:
exportfs [选项]
常用选项:
- -r:重新挂载/etc/exports中定义的共享目录
- -v:在屏幕上输出详细信息
3.3、NFS客户端配置
客户端需要安装的软件包即运行的服务与服务端相同。
使用以下命令挂载NFS服务端共享的目录:
mount -t nfs NFS服务端:目录 本地目录
例如:在NFS服务端192.168.0.22上共享/mnt目录,客户端需将其挂载在本机的/nfs目录下,使用命令如下
mount -t nfs 192.168.0.22:/mnt /nfs
使用以下命令可以查看NFS服务端上的共享目录:
showmount -e NFS服务端
4、反删除工具extundelete
4.1、简介及恢复原理
由于Linux没有类似Windows中回收站的功能,所以一旦误删除文件就只能通过数据恢复工具来找回。在Linux下有很多开源的数据恢复工具,常见的有debugfs、R-Linux、ext3grep、extundelete等,比较常用的有ext3grep和extundelete,这两个工具的恢复原理基本一样,但是ext3grep仅支持ext3的恢复,且恢复速度较慢,extundelete支持ext3/ext4,恢复速度更快,功能更加强大。
extundelete的恢复原理如下:
首先通过文件系统的inode信息(根目录的inode一般为2)来获得当前文件系统下所有文件的信息,包括存在的和已经删除的文件,然后利用inode信息结合日志去查询该inode所在的block位置,包括直接块,间接块等信息。最后利用dd命令将这些信息备份出来,从而恢复数据文件。
4.2、extundelete的使用
访问extundelete官网:http://extundelete.sourceforge.net/下载extundelete的源码包,通过源码编译安装extundelete。注意:extundelete的编译安装需要依赖包e2fsprogs、e2fsprogs-devel,请先确保已安装这两个包。
extundelete的常用选项:
- --restore-inode :恢复指定节点的文件,恢复的文件会自动放在软件运行目录下的RESTORED_FILES文件夹中,使用节点编号作为参数
- --restore-file:恢复指定目录的文件,恢复的文件会自动放在软件运行目录下的RESTORED_FILES文件夹中,使用目录作为参数
- --restore-all:恢复所有的目录和文件