文件系统管理/高级文件系统管理
2021-03-21 17:09:02 0 举报
AI智能生成
文件系统管理/高级文件系统管理 part-7
作者其他创作
大纲/内容
文件系统管理
一、硬盘结构
1、硬盘的逻辑结构
0磁道和0扇区放的时系统的驱动程序
碳钢合金
每个扇区的大小事固定的,为512Byte。扇区也是磁盘的最小存贮单位。
机械式硬盘 133MB/s 速度慢,易损坏
硬盘的大小是使用“磁头数×柱面数×扇区数×每个扇区的大小”这样的公式来计算的。
其中磁头数(Heads)表示硬盘总共有几个磁头,也可以理解成为硬盘有几个盘面,然后乘以二;
柱面数(Cylinders)表示硬盘每一面盘片有几条磁道;
扇区数(Sectors)表示每条磁道上有几个扇区;每个扇区的大小一般是512Byte。
2、硬盘接口
IDE硬盘接口(Integrated Drive Electronics,并口,即电子集成驱动器)也称作“ATA硬盘”或“PATA硬盘”,是早期机械硬盘的主要接口,ATA133硬盘的理论速度可以达到133MB/s(此速度为理论平均值),IDE硬盘接口
SATA接口(Serial ATA,串口)是速度更高的硬盘标准,具备了更高的传输速度,并具备了更强的纠错能力。目前已经是SATA三代,理论传输速度达到600MB/s(此速度为理论平均值)
SCSI接口(Small Computer System Interface,小型计算机系统接口)广泛应用在服务器上,具有应用范围广、多任务、带宽大、CPU占用率低及支持热插拔等优点,理论传输速度达到320MB/s
PCI-E
2000MB/s
cpu分级缓存
一级缓存,二级缓存,三级缓存
内存
硬盘
二、文件系统
1. Linux文件系统的特性:
super block(超级块)
记录整个文件系统的信息,包括block与inode的总量,已经使用的inode和block的数量,未使用的inode和block的数量,block与inode的大小,文件系统的挂载时间,最近一次的写入时间,最近一次的磁盘检验时间等。
dump2fs {硬盘挂载文件} 查看分组情况
date block(数据块,也称作block)
用来实际保存数据的(柜子的隔断),block的大小(1KB、2KB或4KB)和数量在格式化后就已经决定,不能改变,除非重新格式化(制作柜子的时候,隔断大小就已经决定,不能更改,除非重新制作柜子)。每个blcok只能保存一个文件的数据,要是文件数据小于一个block块,那么这个block的剩余空间不能被其他文件是要;要是文件数据大于一个block块,则占用多个block块。Windows中磁盘碎片整理工具的原理就是把一个文件占用的多个block块尽量整理到一起,这样可以加快读写速度。
inode(i节点,柜子门上的标签)
用来记录文件的权限(r、w、x),文件的所有者和属组,文件的大小,文件的状态改变时间(ctime),文件的最近一次读取时间(atime),文件的最近一次修改时间(mtime),文件的数据真正保存的block编号。每个文件需要占用一个inode。
2. Linux常见文件系统
ext
Linux中最早的文件系统,由于在性能和兼容性上具有很多缺陷,现在已经很少使用
ext2
是ext文件系统的升级版本,Red Hat Linux 7.2版本以前的系统默认都是ext2文件系统。于1993年发布,支持最大16TB的分区和最大2TB的文件(1TB=1024GB=1024×1024KB)
ext3
是ext2文件系统的升级版本,最大的区别就是带日志功能,以便在系统突然停止时提高文件系统的可靠性。支持最大16TB的分区和最大2TB的文件
ext4
是ext3文件系统的升级版。ext4 在性能、伸缩性和可靠性方面进行了大量改进。ext4的变化可以说是翻天覆地的,比如向下兼容ext3、最大1EB文件系统和16TB文件、无限数量子目录、Extents连续数据块概念、多块分配、延迟分配、持久预分配、快速FSCK、日志校验、无日志模式、在线碎片整理、inode增强、默认启用barrier等。它是CentOS 6.x的默认文件系统
xfs
XFS最早针对IRIX操作系统开发,是一个高性能的日志型文件系统,能够在断电以及操作系统崩溃的情况下保证文件系统数据的一致性。它是一个64位的文件系统,后来进行开源并且移植到了Linux操作系统中,目前CentOS 7.x将XFS+LVM作为默认的文件系统。据官方所称,XFS对于大文件的读写性能较好。
swap
swap是Linux中用于交换分区的文件系统(类似于Windows中的虚拟内存),当内存不够用时,使用交换分区暂时替代内存。一般大小为内存的2倍,但是不要超过2GB。它是Linux的必需分区
NFS
NFS是网络文件系统(Network File System)的缩写,是用来实现不同主机之间文件共享的一种网络服务,本地主机可以通过挂载的方式使用远程共享的资源
iso9660
光盘的标准文件系统。Linux要想使用光盘,必须支持iso9660文件系统
fat
就是Windows下的fat16文件系统,在Linux中识别为fat
vfat
就是Windows下的fat32文件系统,在Linux中识别为vfat。支持最大32GB的分区和最大4GB的文件
NTFS
就是Windows下的NTFS文件系统,不过Linux默认是不能识别NTFS文件系统的,如果需要识别,则需要重新编译内核才能支持。它比fat32文件系统更加安全,速度更快,支持最大2TB的分区和最大64GB的文件
ufs
Sun公司的操作系统Solaris和SunOS所采用的文件系统
proc
Linux中基于内存的虚拟文件系统,用来管理内存存储目录/proc
sysfs
和proc一样,也是基于内存的虚拟文件系统,用来管理内存存储目录/sysfs
tmpfs
也是一种基于内存的虚拟文件系统,不过也可以使用swap交换分区
三、常用的硬盘管理命令
1、df命令
查看硬盘占用情况
[root@localhost ~]# df –ahT
#-a 显示特殊文件系统,这些文件系统几乎都是保存在内存中的。如/proc,因为是挂载在内存中,所以占用量都是0
#-h 单位不再只用KB,而是换算成习惯单位
#-T 多出了文件系统类型一列
ll 命令 不支持统计目录大小,只支持文件大小
统计目录时不会统计子文件的大小,只会统计文件名所只占用的block大小。是4K的倍数<br>但是Boot分区的block默认大小是1Kb
2、du命令
查看目录的情况
[root@localhost ~]# du [选项] [目录或文件名]<br>选项:<br>-a 显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量<br>-h 使用习惯单位显示磁盘占用量,如KB,MB或GB等<br>-s 统计总占用量,而不列出子目录和子文件的占用量
du与df的区别
du是用于统计文件大小的,统计的文件大小是准确的;df是用于统计空间大小的,统计的剩余空是准确的
两个大小不一致的原因是因为,系统产生的临时文件
lsof | grep deleted”<br>查看被删除的文件,然后一个进程一个进程的手工kill也是可以的,
建议重启系统
3、fsck文件系统修复命令
[root@localhost ~]# fsck –y /dev/sdb1<br>#自动修复
在系统开始时,会自动执行,不需要手动执行
作用不大
4、显示磁盘状态dumpe2fs
[root@localhost ~]# dumpe2fs /dev/sda3<br>dumpe2fs 1.41.12 (17-May-2010)<br>Filesystem volume name: <none> 卷标名<br>Last mounted on: / 挂载点<br>Filesystem UUID: c2ca6f57-b15c-43ea-bca0-f239083d8bd2 UUID<br>Filesystem magic number: 0xEF53<br>Filesystem revision #: 1 (dynamic)<br>Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg spars<br>e_super large_file huge_file uninit_bg dir_nlink extra_isize<br>Filesystem flags: signed_directory_hash<br>Default mount options: user_xattr acl 挂载参数<br>Filesystem state: clean 文件系统状态,正常<br>Errors behavior: Continue<br>Filesystem OS type: Linux<br>Inode count: 1826816 inode总数<br>Block count: 7300864 块总素<br>Reserved block count: 365043<br>Free blocks: 6634637<br>Free inodes: 1753533<br>First block: 0<br>Block size: 4096 块大小<br>Fragment size: 4096<br>Reserved GDT blocks: 1022<br>Blocks per group: 32768<br>Fragments per group: 32768<br>Inodes per group: 8192<br>Inode blocks per group: 512<br>Flex block group size: 16<br>Filesystem created: Mon Nov 12 22:30:41 2012<br>Last mount time: Tue Apr 9 23:53:29 2013<br>Last write time: Mon Nov 12 22:45:55 2012<br>Mount count: 3<br>Maximum mount count: -1<br>Last checked: Mon Nov 12 22:30:41 2012<br>Check interval: 0 (<none>)<br>Lifetime writes: 3199 MB<br>Reserved blocks uid: 0 (user root)<br>Reserved blocks gid: 0 (group root)<br>First inode: 11<br>Inode size: 256 inode的大小
…省略部分输出…<br>Group 0: (Blocks 0-32767) [ITABLE_ZEROED] 第一个数据组的内容<br>校验和 0xcb85,8179个未使用的inode<br>主 superblock at 0, Group descriptors at 1-2<br>保留的GDT块位于 3-1024<br>Block bitmap at 1025 (+1025), Inode bitmap at 1041 (+1041)<br>Inode表位于 1057-1568 (+1057)<br>23513 free blocks, 8179 free inodes, 2 directories, 8179个未使用的inodes<br>可用块数: 9255-32767<br>可用inode数: 14-8192<br>…省略部分输出…
5、查看文件的详细时间
stat 文件名 查看文件的详细时间
例如
[root@localhost ~]# stat test.sh
File: `test.sh'
#文件名
Size: 427 Blocks: 8 IO Block: 4096 regular file
#文件大小 占用块 系统分区块大小
Device: fd00h/64768d Inode: 23724038 Links: 1
#存放文件的设备 inode号 硬链接数
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
权限 属主 属组
Access: 2011-10-29 22:27:45.000000000 +0800
Modify: 2011-09-14 18:02:00.000000000 +0800
Change: 2011-10-25 22:21:44.000000000 +0800
access 访问时间
modify 数据修改时间
change 状态修改时间
6、判断文件类型
file 文件名 判断文件类型
type 命令名 判断命令类型
内部命令
提示 cd is a shell builtin
说明是内部命令
外部命令
没有提示上述命令
说明是外部命令
四、fdisk命令手工分区
1.查看系统所有硬盘及分区
fdisk -l
注意fdisk只识别MBR分区表,不识别GPT分区表
2.进行磁盘分区(分区还没有分区号)
fdisk /dev/sdb
fdisk 交互指令说明
a 设置可引导标记
b 编辑 bsd 磁盘标签
c 设置 DOS 操作系统兼容标记
d 删除一个分区
l 显示已知的文件系统类型。82 为 Linux swap 分区,83 为 Linux 分区
m 显示帮助菜单
n 新建分区
o 建立空白 DOS 分区表
p 显示分区列表
q 不保存退出
s 新建空白 SUN 磁盘标签
t 改变一个分区的系统 ID
u 改变显示记录单位
v 验证分区表
w 保存退出
x 附加功能(仅专家)
流程
主分区
n---p 主----1 分区号----1 起始柱面-----分区大小+100M-----w
扩展分区
n---e 扩展---2 分区号---124 起始柱面----1024 柱面(所有剩余空间都分配给扩展分区)
逻辑分区
n---l 逻辑---不用指定分区号---124 起始柱面----+100M(指定大小)-----w
有时因为系统的分区表正忙,则需要重新启动系统之后才能使新的分区表生效。
Command (m for help): w 保存退出<br>The partition table has been altered!<br>Calling ioctl() to re-read partition table.<br>WARNING: Re-reading the partition table failed with error 16: <br>Device or resource busy.<br>The kernel still uses the old table.<br>The new table will be used at the next reboot. 要求重启动,才能格式化<br>Syncing disks.
3 partprobe
强制重读所有分区文件,重新挂载分区文件内所有分区。这不是分区必须<br>命令,如果没有提示重启,可以不执行,也可以重启系统
(Warning: Unable to open /dev/hdc read-write (Read-only file system). /dev/hdc has <br>been opened read-only.<br>光盘只读挂载,不是错误,不用紧张)<br>如果这个命令不存在请安装 parted-2.1-18.el6.i686 这个软件包
4 格式化
建立文件系统
命令
mkfs -t ext4 /dev/sdb1<br>mkfs -t ext4 /dev/sdb5
mkfs 命令非常简单易用,不过是不能调整分区的默认参数的(比如块大小是 4096),这些默认参数除非特殊情况,<br>否则不需要调整,如果想要调整就需要使用 mke2fs 命令进行重新格式化,命令格式如下:
[root@localhost ~]# mke2fs [选项] 分区设备文件名<br>选项:<br>-t 文件系统: 指定格式化成哪个文件系统,如 ext2,ext3,ext4<br>-b 字节: 指定 block 块的大小<br>-i 字节: 指定“字节/inode”的比例,也就是多少个字节分配一个 inode<br>-j: 建立带有 ext3 日志功能的文件系统<br>-L 卷标名: 给文件系统设置卷标名,就不使用 e2label 命令设定了<br>举个例子:<br>[root@localhost ~]# mke2fs -t ext4 -b 2048 /dev/sdb6 <br>#格式化分区,并指定 block 的大小为 2048
5 建立挂载点
mkdir /disk1-----------------/dev/sdb1 把 sdb1 打算挂载到/disk1 目录中
mkdir /disk5----------------/dev/sdb5
6 挂载
mount /dev/sdb1 /disk1
mount /dev/sdb5 /disk5
7 查看
mount 查看所有已经挂载的分区和光盘
fdisk -l 查看系统分区
df 查看分区占用百分比
8 自动挂载
修改分区自动挂载文件
vi /etc/fstab 注意:此文件直接参与系统启动,如果修改错误,系统启动报错
移动设备是禁止自动挂载的,原因是当系统启动时没有检测到此设备,就会报错
/dev/sdb1 /disk1 ext3 defaults 1 2
第一列: 设备文件名
第二列 挂载点
第三列 文件系统
第四列 挂载选项
第五列 1 是否可以被备份 0 不备份 1 每天备份 2 不定期备份
第六列 2 是否检测磁盘 fsck 0 不检测 1 启动时检测 2 启动后检测
根分区建议启动检测<br>其他区可以启动后检测
也可以使用 UUID 进行挂载,UUID(硬盘通用唯一识别码,可以理解为硬盘的 ID)
这个字段在 CentOS 5.5 的系统当中是写入分区的卷标名或分区设备文件名的,现在变<br>成了硬盘的 UUID。这样做的好处是当硬盘增加了新的分区,或者分区的顺序改变,再或<br>者内核升级后,任然能够保证分区能够正确的加载,而不至于造成启动障碍
使用UUID的作用是,当设备更换时,系统能够检测到设备的变化不会混乱,从而正确地挂载,从而防止了系统报错
那么每个分区的 UUID 到底是什么呢?我们讲过的 dumpe2fs 命令是可以查看到的,命令
如下:
[root@localhost ~]# dumpe2fs /dev/sdb5
[root@localhost ~]# ls -l /dev/disk/by-uuid/
9.重启测试
或 mount -a 重新挂载所有内容,用它进行测试
五、/etc/fstab/文件修复
,如图9-16所示:
他提示你输入root密码啊,好像还有戏啊,我们输入密码试试,
赶快把/etc/fstab文件修改回来吧。晕,报错了
分析下原因提示是没有写权限,那么只要把/分区重新挂载下,挂载为读写权限不就可以修改了吗?命令如下
[root@localhost ~]# mount -o remount,rw /
再去修改/etc/fstab文件,把它改回来就可以正常启动了啊。
六、parted命令分区
我们Linux系统中有两种常见的分区表MBR分区表(主引导记录分区表)和GPT分区表(GUID分区表),其中:
MBR分区表:支持的最大分区是2TB(1TB=1024GB);最多支持4个主分区,或3个主分区1个扩展分区
GPT分区表:支持最大18EB的分区(1EB=1024PB=1024*1024TB);最多支持128个分区,其中1个系统保留分区,127个用户自定义分区
parted地缺陷
不过parted命令也有点小问题,就是命令自身分区的时候只能格式化成ext2文件系统,不支持ext3文件系统,那就更不用说ext4文件系统了(截止到CentOS 6.8还是这样,这里只是指不能用parted命令把分区格式化成ext4文件系统,但是parted命令还是可以识别ext4文件系统的)。不过这没有太多的影响,因为我们可以先分区再用mkfs进行格式化嘛!
一)parted交互模式
[root@localhost ~]# parted /dev/sdb
#打算继续划分/dev/sdb硬盘
GNU Parted 2.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) parted的等待输入交互命令的位置
parted交互命令
check NUMBER
做一次简单的文件系统检测
cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER
复制文件系统到另外一个分区
help [COMMAND]
显示所有的命令帮助
mklabel,mktable LABEL-TYPE
创建新的磁盘卷标(分区表)
mkfs NUMBER FS-TYPE
在分区上建立文件系统
mkpart PART-TYPE [FS-TYPE] START END
创建一个分区
mkpartfs PART-TYPE FS-TYPE START END
创建分区,并建立文件系统
move NUMBER START END
移动分区
name NUMBER NAME
给分区命名
print [devices|free|list,all|NUMBER]
显示分区表,活动设备,空闲空间,所有分区
quit
退出
rescue START END
修复丢失的分区
resize NUMBER START END
修改分区大小
rm NUMBER
删除分区
select DEVICE
选择需要编辑的设备
set NUMBER FLAG STATE
改变分区标记
toggle [NUMBER [FLAG]]
切换分区表的状态
unit UNIT
设置默认的单位
Version
显示版本
二)建立分区
1、 查看分区
(parted) print<br>#输入print指令<br>Model: VMware, VMware Virtual S (scsi) 硬盘参数,是虚拟机啊<br>Disk /dev/sdb: 21.5GB 硬盘大小<br>Sector size (logical/physical): 512B/512B 扇区大小<br>Partition Table: msdos 分区表类型,就是MBR分区表<br>Number Start End Size Type File system 标志<br>1 32.3kB 5379MB 5379MB primary<br>2 5379MB 21.5GB 16.1GB extended<br>5 5379MB 7534MB 2155MB logical ext4<br>6 7534MB 9689MB 2155MB logical ext4<br>#看到了我们使用fdisk分的区,其中1分区没有格式化,2分区是扩展分区不能格式化
使用print可以查看分区表信息,包括硬盘参数,硬盘大小,扇区大小,分区表类型和分区信息。<br>分区信息总共七列,分别是:
Number:分区号
Start:分区起始位置,这里不再像fdisk用柱面表示,而是使用Byte更加直观
End:分区结束位置
Size:分区大小
Type:分区类型
File system:文件系统类型。我不是说parted不支持ext4文件系统吗?<br><font color="#c41230">注意,我一直都是说parted不能直接把分区直接格式化成ext4文件系统,但是它是可以识别的。</font>
标志:Flags,就是分区的标记
2、修改成GPT分区表
修改了分区表,如果这块硬盘已经有分区了,那么原有分区和分区中的数据都会消失,而且需要重启系统才会生效。
还有我们转换分区表的目的是为了支持大于2TB的分区,如果分区并没有大于2TB,那么这步是可以不执行的。
注意:一定要把/etc/fstab文件中和原有分区的内容删除掉,才能重启动。要不系统启动就一定会报错的。
3、 建立分区
因为修改过了分区表,所以/dev/sdb中的所有数据都消失了,所以我们可以重新对这块硬盘分区了。不过建立分区时,默认文件系统就只能建立成ext2了,命令如下:
(parted) mkpart<br>#输入创建分区命令,后面不要参数,全部靠交互指定<br>分区名称? []? disk1 分区名称,我起名叫disk1<br>文件系统类型? [ext2]? 文件系统类型,直接回车,使用默认ext2<br>起始点? 1MB 分区从1MB开始<br>结束点? 5GB 分区到5GB结束<br>#分区完成<br>(parted) print 查看下吧<br>Model: VMware, VMware Virtual S (scsi)<br>Disk /dev/sdb: 21.5GB<br>Sector size (logical/physical): 512B/512B<br>Partition Table: gpt<br>Number Start End Size File system Name 标志<br>1 1049kB 5000MB 4999MB disk1 分区1已经出现<br>
不知道大家注意到了吗?我们现在的print查看的分区,和第一次查看MBR分区表的分区时有些不一样了,少了Type这个字段,也就是分区类型的字段,多了Name分区名字段。分区类型是标识主分区、扩展分区和逻辑分区的,不过这种标识只在MBR分区表中使用,我们现在已经变成了GPT分区表了,所以就不再有Type类型了。
4、 建立文件系统
分区分完了,我们还需要格式化。不过我们已经知道如果使用parted交互命令格式化的话,只能格式化成ext2文件系统。我们这里是要演示下parted命令的格式化方法,所以就格式化成ext2吧,命令如下:
(parted) mkfs<br>#<font color="#c41230">格式化命令(很奇怪也是mkfs,但是这只是parted的交互命令)</font><br>WARNING: you are attempting to use parted to operate on (mkfs) a file system.<br>parted's file system manipulation code is not as robust as what you'll find in<br>dedicated, file-system-specific packages like e2fsprogs. We recommend<br>you use parted only to manipulate partition tables, whenever possible.<br>Support for performing most operations on most types of file systems<br>will be removed in an upcoming release.<br>警告: The existing file system will be destroyed and all data on the partition will be lost. Do you want to continue?<br>是/Yes/否/No? yes 警告你格式化数据会丢失,没关系,已经丢失过了<br>分区编号? 1<br>文件系统类型? [ext2]? 指定文件系统类型,写别的也没有用,直接回车<br>(parted) print 格式化完成,查看下<br>Model: VMware, VMware Virtual S (scsi)<br>Disk /dev/sdb: 21.5GB<br>Sector size (logical/physical): 512B/512B<br>Partition Table: gpt<br>Number Start End Size File system Name 标志<br>1 1049kB 5000MB 4999MB ext2 disk1 拥有了文件系统
如果要格式化成ext4文件系统,请mkfs命令帮忙吧(注意不是parted交互命令中的mkfs,而是系统命令mkfs)!
5、 调整分区大小
parted命令还有一大优势,就是可以调整分区的大小(windows中也可以实现,不过要不需要转换成动态磁盘,要不需要依赖第三方工具,如硬盘分区魔术师)。起始Linux中LVM和RAID是可以支持分区调整的,不过这两种方法也可以看成是动态磁盘方法,我们在下一个章节中介绍。使用parted命令调整分区要更加简单。
注意:parted调整已经挂载使用的分区时,是不会影响分区中的数据的,也就是说数据不会丢失。但是一定要先卸载分区,再调整分区大小,否则数据是会出现问题的。还有要调整大小的分区必须已经建立了文件系统(格式化),否则会报错<br>
命令如下:
(parted) resize<br>分区编号? 1 指定要修改的分区编号<br>起始点? [1049kB]? 1MB 分区起始位置<br>结束点? [5000MB]? 6GB 分区结束位置<br>(parted) print 查看下<br>Model: VMware, VMware Virtual S (scsi)<br>Disk /dev/sdb: 21.5GB<br>Sector size (logical/physical): 512B/512B<br>Partition Table: gpt<br>Number Start End Size File system Name 标志<br>1 1049kB 6000MB 5999MB ext2 disk1 分区大小改变
6、 删除分区
还有件事要注意,parted中所有的操作都是立即生效,没有保存生效的概念。这点和fdisk交互命令明显不同,所以所做的所有操作大家要倍加小心。
那么到底使用fdisk进行分区?还是parted命令呢?这个完全看个人习惯,我们更加习惯fdisk命令。
七、分配swap分区
1、分区,并修改为swap分区ID
[root@localhost ~]# fdisk /dev/sdb<br>#拿/dev/sdb分区<br>Command (m for help): t 修改分区的系统ID<br>Selected partition 1 只有一个分区,所以不用选择分区了<br>Hex code (type L to list codes): 82 改为swap的ID<br>Changed system type of partition 1 to 82 (Linux swap / Solaris)
2、格式化
[root@localhost ~]# <font color="#c41230">mkswap /dev/sdb1</font><br>Setting up swapspace version 1, size = 522076 KiB<br>no label, UUID=c3351dc3-f403-419a-9666-c24615e170fb
3 使用swap分区
在使用swap分区之前,我们先来说说free命令,命令如下:
用来查看内存和swap分区地占用情况
[root@localhost ~]# free<br>total used free shared buffers cached<br>Mem: 1030796 130792 900004 0 15292 55420<br>-/+ buffers/cache: 60080 970716<br>Swap: 2047992 0 2047992
buffer 指写入硬盘时地数据缓冲
cached 指读取硬盘数据时地数据缓存
[root@localhost ~]# swapon 分区设备文件名<br>例:<br>[root@localhost ~]# swapon /dev/sdb1
让swap分区开机之后自动挂载
/dev/sdb1 swap swap defaults 0 0
#加入新swap分区的相关内容,我这里是直接使用的分区的设备文件名,大家当然也可以
#使用UUID号了。
高级文件系统管理
一、磁盘配额
1、磁盘配额概念
限制用户和用户组使用磁盘空间和文件个数的作用
限制普通用户在分区上的容量和文件数量的作用,不能限制超级用户
2、磁盘配额条件
内核必须支持磁盘配额
[root@localhost ~]# grep CONFIG_QUOTA /boot/config-2.6.32-279.el6.i686
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
# CONFIG_QUOTA_DEBUG is not set
CONFIG_QUOTA_TREE=y
CONFIG_QUOTACTL=y
系统中必须安装了quota工具,我们的Linux默认是安装了quota工具的,查看命令如下
[root@localhost ~]# rpm -qa | grep quota
quota-3.17-16.el6.i686
要支持磁盘配额的分区必须开启磁盘配额功能,这个功能需要手工开启,不再是默认就开启的
3、概念
1)用户配额和组配额
组配额中地用户并不是平均分配磁盘大小,而是先到先得,分配不合理,一般不使用组配额
用户配额可以用shell 脚本
2)磁盘容量限制和文件个数限制
文件个数限制,由于每个文件拥有一个Inode节点,Inode节点是有限地,因此在限制磁盘容量的同时应该限制Inode节点号
3)软限制和硬限制
软限制,可以超过容量
硬限制,不能超容量限制
4)宽限时间
4、磁盘配额规划
1、磁盘配额是限制的普通用户在分区上使用磁盘空间和文件个数的,所以我们需要指定一个分区。那么我们手工建立一个5GB的/dev/sdb1分区,把它挂载到/disk目录当中。
2、还有我们需要建立被限制的用户和用户组。那么我们假设需要限制user1、user2和user3用户,这三个用户属于test用户组。
3、其中test组磁盘容量硬限制为500MB,软限制450MB,文件个数不做限制。user1用户为了便于测试,磁盘容量硬限制为50MB,软限制为40MB,文件个数硬限制限制为10个,软限制为8个。user2和user3用户磁盘容量硬限制为250MB,软限制为200MB,文件个数不做限制。
4、大家发现user1、user2和user3用户加起来的磁盘容量限制为550MB,超过了test组的磁盘容量限制500MB。这样的话,某个用户可能达不到自己的用户限制,而达到组限制时就不能再写入数据了。也就是说,如果用户限制和组限制同时存在,那么哪个限制更小,哪个限制优先生效。
5、系统宽限时间我们改为8 天。
5、磁盘配额步骤
1)分5GB 的/dev/sdb1 分区,并将它挂载到/disk 目录当中
2)建立需要做限制的用户和用户组
[root@localhost ~]# groupadd test
[root@localhost ~]# useradd -G test user1
[root@localhost ~]# useradd -G test user2
[root@localhost ~]# useradd -G test user3
[root@localhost ~]# passwd user1
[root@localhost ~]# passwd user2
[root@localhost ~]# passwd user3
3)、在分区上开启磁盘配额功能
[root@localhost ~]# mount -o remount,usrquota,grpquota /disk
#重新挂载/disk 分区,并加入用户和用户组的磁盘配额功能
我们要想永久生效,则需要修改/etc/fstab 文件,改成:
[root@localhost ~]# vi /etc/fstab
/dev/sdb1 /disk ext4 defaults,usrquota,grpquota 0 0
…省略部分输出…
[root@localhost ~]# mount –o remount /disk
#修改配置文件如果想要生效,必须重启系统,否则也需要把分区重新挂载一遍。
4)、建立磁盘配额的配置文件
命令
[root@localhost ~]# quotacheck [选项] [分区名]<br>选项:<br>-a:扫描/etc/mtab 文件中所有启用磁盘配额功能的分区。如果加入此参数,命令后面<br>就不需要加入分区名了<br>-c:不管原有的配置文件,重新扫描并建立新的配置文件<br>-u:建立用户配额的配置文件,也就是生成aquota.user 文件<br>-g:建立组配额的配置文件,会生成aquota.group 文件<br>-v:显示扫描过程<br>-m:强制以读写的方式扫描文件系统,和-M 类似。一般扫描根分区时使用。<br>-f:强制扫描文件系统,并写入新的配置文件。一般扫描新添加的硬盘分区时使用
[root@localhost ~]# quotacheck -avug
[root@localhost ~]# ll /disk/<br>总用量 24<br>-rw------- 1 root root 6144 4 月 17 01:08 aquota.group<br>-rw------- 1 root root 6144 4 月 17 01:08 aquota.user<br>#/disk 目录中两个配额配置文件已经建立
说明生效
需要关闭SELinux,否则会报错
命令(临时)关闭SELinux 0 为关闭 ,1 为生效
修改配置文件,永久生效
如果需要给根分区开启配额功能,需要:
[root@localhost ~]# vi /etc/fstab
UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults,usrquota,grpquota 1 1
#开启/分区的配额功能
[root@localhost ~]# mount -o remount /
#重新挂载/分区
[root@localhost ~]# quotacheck -avugm
如果我们自动扫描/分区建立配额配置文件时,因为/分区已经挂载成读写系统,而quotacheck需要把分区先挂载成只读分区,然后建立配置文件,最后再挂载回来,所以不能直接在/分区建立配置文件。这时就需要使用-m 强制以读写方式扫描文件系统了
5)、 设置用户和组的配额限制
[root@localhost ~]# edquota [选项] [用户名或组名]<br>选项:<br>-u 用户名: 设定用户配额<br>-g 组名: 设定组配额<br>-t: 设定宽限时间<br>-p: 复制配额限制。如果已经设定好某个用户的配额限制,其他用户的配额限<br>制如果和这个用户相同,那么可以直接复制配额限制,而不用都手工指定
我们给user1 用户设定的配额限制是:磁盘空间软限制是40MB,硬限制是50MB;文件个数的软<br>限制是8 个,硬限制是10 个(稍微小一点,一会测试时方便测试)。命令如下:
[root@localhost ~]# edquota -u user1<br>#edquota 命令进入之后,就是标准的vi 操作方法<br>Disk quotas for user user1 (uid 500):<br>#磁盘配额是设定用户user1(UID 是500)<br>Filesystem blocks soft hard inodes soft hard<br>/dev/sdb1 0 0 0 0 0 0<br>#分区名 已占用容量 软限制 硬限制 已占用文件数 软限制 硬限制<br>Disk quotas for user user1 (uid 500):<br>Filesystem blocks soft hard inodes soft hard<br>/dev/sdb1 0 40000 50000 0 8 10<br>#不用对齐,是七列就行<br>
再给user2 用户配置限额,user2 用户要求是空间软限制250MB,硬限制250MB,<br>文件个数不做限制:
[root@localhost ~]# edquota -u user2<br>Disk quotas for user user2 (uid 501):<br>Filesystem blocks soft hard inodes soft hard<br>/dev/sdb1 0 250000 300000 0 0 0<br>
接下来给test 组配置限额,test 组要求是空间软限制是450MB,硬限制500MB,文件个数不做限
制:
[root@localhost ~]# edquota -g test
Disk quotas for group test (gid 500):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0 450000 500000 0 0 0
6)、 配额复制
user3 用户的配额值和user2 用户完全一样,我们就可以使用user2 用户作为模板进行复制。这<br>样我们如果需要建立大量的配额值一致的用户时,就会非常方便,不用一个个手工建立了。复制命令<br>如下:
[root@localhost ~]# edquota -p user2 -u user3
#命令 -p 源用户 -u 目标用户
7)、修改宽限时间
我们要求把宽限时间改为8 天,修改命令如下:
[root@localhost ~]# edquota –t
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/sdb1 8days 8days
#分区名 容量的宽限时间 个数的宽限时间
8)、启动和关闭配额
配额的配置完成,接下来只需要启动配额就大功告成了
启动命令如下:
[root@localhost ~]# quotaon [选项] [分区名]
选项:
-a:依据/etc/mtab 文件启动所有的配额分区。如果不加-a,后面就一定要指定分区名
-u:启动用户配额
-g:启动组配额
-v:显示启动过程的信息
[root@localhost ~]# quotaon -vug /disk/
/dev/sdb1 [/disk]: group quotas turned on
/dev/sdb1 [/disk]: user quotas turned on
#启动/disk 分区的配额
[root@localhost ~]# quotaon –avug
#这条命令也可以
关闭配额的命令如下:
[root@localhost ~]# quotaoff [选项] [分区名]
选项
-a:依据/etc/mtab 文件关闭所有的配额分区。如果不加-a,后面就一定要指定分区名
-u:关闭用户配额
-g:关闭组配额
[root@localhost ~]# quotaoff –a
#依据/etc/mtab 文件关闭配额分区
6、磁盘配额查询
quota 查询用户或用户组配额:
[root@localhost ~]# quota [选项] [用户名或组名]
选项:
-u 用户名: 查询用户配额
-g 组名: 查询组配额
-v: 显示详细信息
-s: 以习惯单位显示容量大小,如M,G
[root@localhost ~]# quota -uvs user1
repquota 查询文件系统配额
[root@localhost ~]# repquota [选项] [分区名]
选项:
-a: 依据/etc/mtab 文件查询配额。如果不加-a 选项,就一定要加分区名
-u: 查询用户配额
-g: 查询组配额
-v: 显示详细信息
-s: 以习惯单位显示容量大小
[root@localhost ~]# repquota –augvs
7、测试
[user1@localhost disk]$ dd if=/dev/zero of=/disk/testfile bs=1M count=60
#建立testfile 文件,指定大小60MB
8、非交互设定用户磁盘配额
[root@localhost ~]# setquota -u 用户名 容量软限制 容量硬限制 个数软限制 \
个数硬限制 分区名
[root@localhost ~]# useradd user4
[root@localhost ~]# passwd user4
#建立用户
[root@localhost ~]# setquota -u user4 10000 20000 5 8 /disk
#设定用户在/disk 分区的容量软限制为10MB,硬限制20MB。文件个数软限制5 个,硬限制#8 个。
这个命令在写脚本批量设置时更加方便。当然写脚本时也可以先建立一个模板的用户,设定好磁
盘配额,再进行配额复制,也是可以的。
二、LVM 逻辑卷管理
1、简介
LVM 是Logical Volume Manager 的简称,中文就是逻辑卷管理。
物理卷(PV,Physical Volume):就是真正的物理硬盘或分区。
卷组(VG,Volume Group):将多个物理卷合起来就组成了卷组,组成同一个卷组的物理卷可以是同一个硬盘的不同分区,也可以是不同硬盘上的不同分区。我们可以把卷组想象为一个逻辑硬盘。
逻辑卷(LV,Logical Volume):卷组是一个逻辑硬盘,硬盘必须分区之后才能使用,这个
分区我们称作逻辑卷。逻辑卷可以格式化和写入数据。我们可以把逻辑卷想象成为分区。
物理扩展(PE,Physical Extend):PE 是用来保存数据的最小单元,我们的数据实际上都
是写入PE 当中,PE 的大小是可以配置的,默认是4MB。
注意/boot不能使用LVM分区,只能使用普通分区的方式
2、建立LVM 的步骤:
首先需要把物理硬盘分成分区,当然也可以是整块物理硬盘。
然后把物理分区建立成为物理卷(PV),也可以直接把整块硬盘都建立为物理卷。
接下来把物理卷整合成为卷组(VG)。卷组就已经可以动态的调整大小了,可以把物理分区<br>加入卷组,也可以把物理分区从卷组中删除。不建议删除
最后就是把卷组再划分成为逻辑卷(LV),当然逻辑卷也是可以直接调整大小的。我们说逻
辑卷可以想象成为分区,所以也需要格式化和挂载。
3、物理卷管理
1)、硬盘分区
创建方式就是使用fdisk 交互命令,不过需要注意的是分区的系统ID 不再是Linux 默认的分区
ID 号83 了,而要改成LVM 的ID 号8e。
2)、建立物理卷
[root@localhost ~]# pvcreate [设备文件名]
建立物理卷时,我们说即可以把整块硬盘都建立成物理卷,也可以把某个分区建立成物理卷。如
果要把整块硬盘都建立成物理卷,命令如下
[root@localhost ~]# pvcreate /dev/sdb
在我们的使用中,是要把分区建立成为物理卷,所以执行以下命令:
[root@localhost ~]# pvcreate /dev/sdb5
3)查看物理卷
[root@localhost ~]# pvscan
PV /dev/sdb5 lvm2 [1.01 GiB]
PV /dev/sdb6 lvm2 [1.01 GiB]
PV /dev/sdb7 lvm2 [1.01 GiB]
Total: 3 [3.03 GiB] / in use: 0 [0 ] / in no VG: 3 [3.03 GiB]
我们可以看到在我的系统中,/dev/sdb5-7 这三个分区是物理卷。最后一行的意思是:总共3 个<br>物理卷[大小] / 使用了0 个卷[大小] / 空闲3 个卷[大小]。
第二个查询命令是pvdisplay,它可以查看到更详细的物理卷状态,命令如下:
[root@localhost ~]# pvdisplay
"/dev/sdb5" is a new physical volume of "1.01 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb5 PV 名
VG Name 属于的VG 名,还没有分配,所以空白
PV Size 1.01 GiB PV 的大小
Allocatable NO 是否已经分配
PE Size 0 PE 大小,因为还没有分配,所以PE 大小也没有指定
Total PE 0 PE 总数
Free PE 0 空闲PE 数
Allocated PE 0 可分配的PE 数
PV UUID CEsVz3-f0sD-e1w0-wkHZ-iaLq-O6aV-xtQNTB PV 的UUID
4)删除物理卷
[root@localhost ~]# pvremove /dev/sdb7
4、卷组管理
1)建立卷组
[root@localhost ~]# vgcreate [选项] 卷组名 物理卷名
选项:
-s PE 大小:指定PE 的大小,单位可以是MB,GB,TB 等。如果不写默认PE 大小事4MB
我们又三个物理卷/dev/sdb5-7,我们先把/dev/sdb5 和/dev/sdb6 加入卷组,留着/dev/sdb7 一
会实验调整卷组大小,命令如下:
[root@localhost ~]# vgcreate -s 8MB scvg /dev/sdb5 /dev/sdb6
Volume group "scvg" successfully created
2)、查看卷组
查看卷组的命令同样是两个,vgscan 主要是查看系统中是否有卷组,而vgdisplay 则是查看卷组的详<br>细状态的。命令如下:
[root@localhost ~]# vgscan<br>Reading all physical volumes. This may take a while...<br>Found volume group "scvg" using metadata type lvm2<br>#scvg 的卷组确实存在<br>
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name scvg 卷组名
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write 卷组访问状态
VG Status resizable 卷组状态
MAX LV 0 最大逻辑卷数
Cur LV 0
Open LV 0
Max PV 0 最大物理卷数
Cur PV 2 当前物理卷数
Act PV 2
VG Size 2.02 GiB 卷组大小
PE Size 8.00 MiB PE 大小
Total PE 258 PE 总数
Alloc PE / Size 0 / 0 已用PE 数量/大小
Free PE / Size 258 / 2.02 GiB 空闲PE 数量/大小
VG UUID Fs0dPf-LV7H-0Ir3-rthA-3UxC-LX5c-FLFriJ
3)、增加卷组容量
[root@localhost ~]# vgextend scvg /dev/sdb7<br>Volume group "scvg" successfully extended<br>#把/dev/sdb7 物理卷也加入scvg 卷组<br>[root@localhost ~]# vgdisplay<br>--- Volume group ---<br>VG Name scvg<br>System ID<br>Format lvm2<br>Metadata Areas 3<br>Metadata Sequence No 2<br>VG Access read/write<br>VG Status resizable<br>MAX LV 0<br>Cur LV 0<br>Open LV 0<br>Max PV 0<br>Cur PV 3<br>Act PV 3<br>VG Size 3.02 GiB 卷组容量增加<br>PE Size 8.00 MiB<br>Total PE 387 PE 总数增加<br>Alloc PE / Size 0 / 0<br>Free PE / Size 387 / 3.02 GiB<br>VG UUID Fs0dPf-LV7H-0Ir3-rthA-3UxC-LX5c-FLFriJ<br>
4)、减小卷组容量
[root@localhost ~]# vgreduce scvg /dev/sdb7
Removed "/dev/sdb7" from volume group "scvg"
#在卷组中删除/dev/sdb7 物理卷
[root@localhost ~]# vgreduce -a
#删除所有的未使用物理卷
一般不允许缩减
5)、删除卷组
[root@localhost ~]# vgremove scvg
Volume group "scvg" successfully removed
卷组删除之后,才能删除删除物理卷。还要注意的是scvg 卷组还没有添加任何的逻辑卷,那如果拥有了逻辑卷,记得先删除逻辑卷再删除卷组。还记得我刚说的吗?删除就是安装的反过程,每一步都不能跳过。
5、逻辑卷管理
1)、建立逻辑卷
注意建立逻辑卷的大小和单个物理卷的大小无关,只要卷组的大小足够就行
[root@localhost ~]# lvcreate [选项] [-n 逻辑卷名] 卷组名
选项:
-L 容量:指定逻辑卷大小,单位MB,GB,TB 等
-l 个数:按照PE 个数指定逻辑卷大小,这个参数需要换算容量,太麻烦
-n 逻辑卷名:指定逻辑卷名
那我们就建立一个1.5GB 的userlv 逻辑卷吧,建立命令如下:
[root@localhost ~]# lvcreate -L 1.5G -n userlv scvg
Logical volume "userlv" created
#在scvg 卷组中建立1.5GB 的userlv 逻辑卷
建立完逻辑卷之后,还要格式化和挂载之后逻辑卷才能正常使用。格式化和挂载命令和操作普通
分区时是一样的,不过需要注意的是逻辑卷的设备文件名是/dev/卷组名/逻辑卷名,如我们的userlv
的设备文件名就是“/dev/scvg/userlv”,具体命令如下:
[root@localhost ~]# mkfs -t ext4 /dev/scvg/userlv<br>#格式化<br>[root@localhost ~]# mkdir /disklvm<br>[root@localhost ~]# mount /dev/scvg/userlv /disklvm/<br>#建立挂载点,并挂载<br>[root@localhost ~]# mount<br>…省略部分输出…<br>/dev/mapper/scvg-userlv on /disklvm type ext4 (rw)<br>#已经挂载了<br>
当然如果需要开机自动挂载,也要修改/etc/fstab 文件。
2)、查看逻辑卷
同样的查看命令是两个,第一个命令lvscan 只能看到系统中是否拥有逻辑卷,命令如下:
[root@localhost ~]# lvscan
ACTIVE '/dev/scvg/userlv' [1.50 GiB] inherit
#能够看到激活的逻辑卷,大小事1.5GB
第二个命令是lvdisplay 可以看到逻辑卷的详细信息,命令如下:
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/scvg/userlv 逻辑卷设备文件名
LV Name userlv 逻辑卷名
VG Name scvg 所属的卷组名
LV UUID 2kyKmn-Nupd-CldB-8ngY-NsI3-b8hV-QeUuna
LV Write Access read/write
LV Creation host, time localhost, 2013-04-18 03:36:39 +0800
LV Status available
# open 1
LV Size 1.50 GiB 逻辑卷大小
Current LE 192
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
3)调整逻辑卷大小
[root@localhost ~]# lvresize [选项] 逻辑卷设备文件名
选项:
-L 容量:安装容量调整大小,单位KB,GB,TB 等。使用+代表增加空间,-号代表减少
空间。如果直接写容量,代表设定逻辑卷大小为指定大小。
-l 个数:按照PE 个数调整逻辑卷大小
注意
往小的容量修改逻辑卷大小有可能造成数据丢失
我们先在/disklvm 中建立点文件,一会调整完大小,我们看看数据是否会丢失:
[root@localhost ~]# cd /disklvm/
[root@localhost disklvm]# touch testf
[root@localhost disklvm]# mkdir testd
[root@localhost disklvm]# ls
lost+found testd testf
userlv 逻辑卷的大小到2.5GB 吧:
[root@localhost disklvm]# lvresize -L 2.5G /dev/scvg/userlv
Extending logical volume userlv to 2.50 GiB
Logical volume userlv successfully resized
#增加userlv 逻辑卷的大小到2.5GB
#当然命令也可以这样写 [root@localhost disklvm]# lvresize -L +1G /dev/scvg/userlv
[root@localhost disklvm]# lvdisplay
--- Logical volume ---
LV Path /dev/scvg/userlv
LV Name userlv
VG Name scvg
LV UUID 2kyKmn-Nupd-CldB-8ngY-NsI3-b8hV-QeUuna
LV Write Access read/write
LV Creation host, time localhost, 2013-04-18 03:36:39 +0800
LV Status available
# open 1
LV Size 2.50 GiB 大小改变了
Current LE 320
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
逻辑卷的大小已经改变了,但是好像有些问题啊:
[root@localhost disklvm]# df -h /disklvm/
文件系统 容量 已用 可用 已用%% 挂载点
/dev/mapper/scvg-userlv 1.5G 35M 1.4G 3% /disklvm
怎么/disklvm 分区的大小还是1.5GB 啊?刚刚只是逻辑卷的大小改变了,如果需要让分区使用这
个新逻辑卷,我们还要使用resize2fs 命令来调整分区的大小。不过这里就体现了LVM 的优势,我们
不需要卸载分区,直接就能调整分区的大小。resize2fs 命令如下:
[root@localhost ~]# resize2fs [选项] [设备文件名] [调整的大小]
选项:
-f: 强制调整
设备文件名:指定调整哪个分区的大小
调整的大小:指定把分区调整到多大,要加M,G 等单位。如果不加大小,会使用整个
分区
那么我们已经把逻辑卷调整到了2.5GB,这时我们就需要把整个逻辑卷都加入/disklvm 分区,命令如下:
[root@localhost ~]# resize2fs /dev/scvg/userlv<br>resize2fs 1.41.12 (17-May-2010)<br>Filesystem at /dev/scvg/userlv is mounted on /disklvm; on-line resizing required<br>old desc_blocks = 1, new_desc_blocks = 1<br>Performing an on-line resize of /dev/scvg/userlv to 655360 (4k) blocks.<br>The filesystem on /dev/scvg/userlv is now 655360 blocks long.<br>#已经调整了分区大小<br>[root@localhost ~]# df -h /disklvm/<br>文件系统 容量 已用 可用 已用%% 挂载点<br>/dev/mapper/scvg-userlv 2.5G 35M 2.4G 2% /disklvm<br>#分区大小已经是2.5GB了<br>[root@localhost ~]# ls /disklvm/<br>lost+found testd testf<br>#而且数据并没有丢失<br>
4)删除逻辑卷
[root@localhost ~]# lvremove 逻辑卷设备文件名
我们删除userlv这个逻辑卷,记得删除时要先卸载。命令如下:
[root@localhost ~]# umount /dev/scvg/userlv
[root@localhost ~]# lvremove /dev/scvg/userlv
0 条评论
下一页