Linux文件管理系统
LINUX文件系统体系结构用户空间(User space)包含一些应用程序(例如,文件系统的使用者)和 GNU C 库(glibc),它们为文件系统调用(打开、读取、写和关闭)提供用户接口。系统调用接口(System call interface)的作用就像是交换器,它将系统调用从用户空间发送到内核空间(Kernel space)中的适当端点。
VFS(Virutal file systems) 是底层文件系统的主要接口。这个组件导出一组接口,然后将它们抽象到各个文件系统,各个文件系统的行为可能差异很大。有两个针对文件系统对象的缓存(inode 和 dentry)。它们缓存最近使用过的文件系统对象。每个文件系统实现(比如 ext2、JFS 等等)导出一组通用接口,供 VFS 使用。缓冲区缓存会缓存文件系统和相关块设备之间的请求。
主要结构
Linux 以一组通用对象的角度看待所有文件系统。这些对象是超级块(superblock)、inode、dentry 和文件。超级块在每个文件系统的根上,超级块描述和维护文件系统的状态。文件系统中管理的每个对象(文件或目录)在 Linux 中表示为一个 inode。inode 包含管理文件系统中的对象所需的所有元数据(包括可以在对象上执行的操作)。另一组结构称为 dentry,它们用来实现名称和 inode 之间的映射,有一个目录缓存用来保存最近使用的 dentry。dentry 还维护目录和文件之间的关系,从而支持在文件系统中移动。最后,VFS 文件表示一个打开的文件(保存打开的文件的状态,比如写偏移量等等)。
虚拟文件系统层
VFS 作为文件系统接口的根层。VFS 记录当前支持的文件系统以及当前挂装的文件系统。
超级块
超级块结构表示一个文件系统。它包含管理文件系统所需的信息,包括文件系统名称(比如 ext2)、文件系统的大小和状态、块设备的引用和元数据信息(比如空闲列表等等)。超级块通常存储在存储媒体上,但是如果超级块不存在,也可以实时创建它。
Linux系统下可使用的文件系统有:
基本文件系统:ext2, ext3, ext4, reiserfs, xfs, btrfs, swap
光盘:iso9660
Windows: fat32(vfat), ntfs
Unix: ffs, ufs, jfs, jfs2
网络文件系统:nfs, cifs
集群文件系统:ocfs2, gfs2
分布式文件系统:ceph, moosefs, mogilefs, hdfs, gfs, glusterfs
(1)日志型文件系统:非日志型文件系统:ext2
日志型文件系统:ext3
(2)swap:交换分区
创建文件系统:
在分区上执行格式化(高级格式化)要使用某种文件系统,满足两个条件:
(1)内核中:支持此种文件系统
(2)用户空间:有文件系统管理工具
系统文件一般的管理工具:
mkfs命令
使用格式: mkfs [-V] [-t fstype] filesys [-L Lable] 作用:创建文件系统
参数
-V : 详细显示模式
-t : 给定文件系统的格式
-c : 在制做档案系统前,检查该partition 是否有坏轨
-l bad_blocks_file : 将有坏轨的block资料加到 bad_blocks_file 里面
block : 给定 block 的大小
-L:建立lable
实例:设定sda2分区的文件格式为ext3,以下两种方式同样可以实现# mkfs.ext3 /dev/sda2# mkfs -t ext3 /dev/sda2
mke2fs命令使用格式:mke2fs ... DEVICE
常用参数-t:{ext2|ext3|ext4}指定需使用的文件系统 -b: {1024|2048|4096} 指定块大小
-L : 'LABEL' 设定标签
-j:mke2fs -t ext3 创建使用ext3卷号的文件系统
-i #: 指定每个inode的字节数
-N #: 指定inode的数量
-m #: 预留磁盘空间占据多大百分比的空间为后期管理使用;
-O: FEATURE[,...] 指定分区特性
-O: ^FEATURE: 关闭此特性
实例:
(1) 使用fdisk创建分区
fdisk /dev/sda
(2)创建分区后,使用partx /dev/sda3 重新激活分区表
# partx /dev/sda
#1: 2048-4098047 ( 4096000 sectors, 2097 MB)
# 2: 4098048-106498047 (102400000 sectors,52428 MB)
# 3:106498048-110703914 (4205867sectors, 2153 MB)
(3)创建文件系统为ext4,指定块大小为1024,卷标为“test”
# mke2fs -t ext4 -b 1024 -L test /dev/sda3
(4)使用blkid命令查看结果
# blkid /dev/sda3
/dev/sda3:LABEL="test" UUID="22c70ef3-9497-4b48-b5c9-5067c5b71710"TYPE="ext4"
文件系统属性查看及调整工具
e2label命令
使用格式:e2lable DEVICE
作用: 查看分区的卷标及设置
# e2label /dev/sda3
test
tune2fs命令
显示ext系列文件系统的属性,或调整其属性;
-l:显示超级块中的信息;显示整个文件的属性及布局等相关信息;
-L: 'LABEL':修改卷标;
-m#: 调整预留给管理员的管理空间百分比;
-j:ext2 --> ext3
-O:文件系统属性的启动或关闭
-o:文件系统默认挂载选项的启用或关闭
dumpe2fs命令
-h: 仅显示超级块信息
文件系统检测:
fsck(Filesystem check)命令
fsck-t type
fsck.type
-a: 自动修复错误
-r: 交互式修复错误
-f: 强制检测
e2fsck命令:ext系列文件系统专用的检测修复工具;
-y: 自动回答为“yes”
-f:force
文件系统的挂载和使用
将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件系统访问入口的行为,称之为挂载;
解除此关联关系的过程为卸载。
挂载点:mount point, 设备挂载至目录;
注意:挂载点在挂载在之后,其内部原有的文件会被暂时隐藏;建立使用空目录做为挂载点
常用的挂载命令有
mount
格式为:mount [-afFhnrvVw] [-L<标签>] [-o<选项>] [-t<文件系统类型>] [设备名] [加载点]作用: 加载指定的文件系统。常用参数和选项:
-a 加载文件/etc/fstab中设置的所有设备。
-f 不实际加载设备。可与-v等参数同时使用以查看mount的执行过程。
-F 需与-a参数同时使用。所有在/etc/fstab中设置的设备会被同时加载,可加快执行速度。
-h 显示在线帮助信息。
-L<标签> 加载文件系统标签为<标签>的设备。
-n 不将加载信息记录在/etc/mtab文件中。
-o<选项> 指定加载文件系统时的选项。有些选项也可在/etc/fstab中使用。这些选项包括:
async 以非同步的方式执行文件系统的输入输出动作。
atime 每次存取都更新inode的存取时间,默认设置,取消选项为noatime。
auto 必须在/etc/fstab文件中指定此选项。执行-a参数时,会加载设置为auto的设备,取消选取为noauto。
defaults 使用默认的选项。默认选项为rw、suid、dev、exec、anto nouser与async。
dev 可读文件系统上的字符或块设备,取消选项为nodev。
exec 可执行二进制文件,取消选项为noexec。
noatime 每次存取时不更新inode的存取时间。
noauto 无法使用-a参数来加载。
nodev 不读文件系统上的字符或块设备。
noexec 无法执行二进制文件。
nosuid 关闭set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位。
nouser 使一位用户无法执行加载操作,默认设置。
remount 重新加载设备。通常用于改变设备的设置状态。
ro 以只读模式加载。
rw 以可读写模式加载。
suid 启动set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位,取消选项为nosuid。
sync 以同步方式执行文件系统的输入输出动作。
user 可以让一般用户加载设备。
-r 以只读方式加载设备。
-t<文件系统类型> 指定设备的文件系统类型。常用的选项说明有:
minix Linux最早使用的文件系统。
ext2 Linux目前的常用文件系统。
msdos MS-DOS 的 FAT。
vfat Win85/98 的 VFAT。
nfs 网络文件系统。
iso9660 CD-ROM光盘的标准文件系统。
ntfs Windows NT的文件系统。
hpfs OS/2文件系统。Windows NT 3.51之前版本的文件系统。
auto 自动检测文件系统。
-v 执行时显示详细的信息。
-V 显示版本信息。
-w 以可读写模式加载设备,默认设置。
unmount:卸载命令# umount DEVICE # umount MOUNT_POINT
实例:(1)创建挂载点 /mnt/test# mkdir /mnt/test(2)把/dev/sda3挂载到/mnt/test上# mount /dev/sda3 /mnt/test(3)使用df –h 命令查看 # df -hFilesystem SizeUsed Avail Use% Mounted on/dev/mapper/789-LogVol01 47G3.5G 41G 8% /tmpfs 491M224K491M 1% /dev/shm/dev/sda1 1.9G 37M1.8G 3% /boot/dev/sr0 3.7G3.7G 0 100% /mnt/iso/dev/sda3 2.0G3.1M1.9G 1% /mnt/test
使用umount命令卸载# umount /mnt/test/# df -hFilesystem SizeUsed Avail Use% Mounted on/dev/mapper/789-LogVol01 47G3.5G 41G 8% /tmpfs 491M224K491M 1% /dev/shm/dev/sda1 1.9G 37M1.8G 3% /boot/dev/sr0 3.7G3.7G 0 100% /mnt/iso
交换分区 查看内存(memory)及交换分区(swap)的命令
free
-m: 以MB为单位
-g: 以GB为单位
# free -m
total used free shared buffers cached
Mem: 981 710 270 3 62 312
-/+ buffers/cache: 336 645
Swap: 1999 0 1999
创建交换分区
mkswap
格式:mkswap DEVICE
-L 'LABEL' 指定卷标
swapon:启用交换分区
格式:swapon
-a: 激活所有交换分区
-p PRIORITY: 设定其优先级
swapoff:禁用交换分区
格式:swapoff
实例:
创建一个交换分区
# mkswap /dev/sda3
Setting up swapspace version 1, size = 2102928 KiB
no label, UUID=023db09a-ccd8-4714-ad69-337b744e2843
# swapo
swapoffswapon
# swapo
swapoffswapon
# swapon /dev/sda3
# swapon –s
Filename Type SizeUsed Priority
/dev/dm-1 partition 2047996 0 -1
/dev/sda3 partition 2102928 0 -2
文件系统等空间占用信息的查看工具
df命令
作用:报告文件系统磁盘空间的使用情况格式:df ... ... POSIX 选项: [-kP]
常用参数
df: disk free 显示磁盘空间
-h: human-readable 用常见的格式显示出大小-i: inode数量 用信息索引点代替块表示使用状况 -P: 以Posix兼容的格式输出
du: disk usage
-s: summary
文件系统上的链接文件:
硬链接:
特性:(1)两个路径指向同一个inode
(2)不能对目录进行;
(3)不能跨分区进行
注意:指向同一个inode的多个不同路径; 创建文件的硬链接会增加inode的引用计数;删除硬链接仅是删除其一个访问路径,只到最后一个路径被删除;
符号链接(软链接):
特性:(1)链接文件的数据指向另一个文件路径
(2)可以对目录进行;
(3)可以跨分区;
注意:指向的是另一个文件路径,而非inode。对文件创建符号链接不会增加其引用计数;删除原文件,符号链接文件也将无法;
ln [-s] SRC DEST
-s:symbolic link
-v:verbose
作业
创建一个10G文件系统,类型为ext4,要求开机可自动挂载至/mydata目录
(1) 创建分区
# fdisk /dev/sda
Command (m for help): n
Command action
e extended
p primary partition (1-4)
e 因只能分四个主分区,之前已有3个在用,因此此处第4个分区分为
Selected partition 4 extended(扩展)
First cylinder (6892-15665, default 6892):
Using default value 6892
Last cylinder, +cylinders or +size{K,M,G} (6892-15665, default 15665):
Using default value 15665
Command (m for help): n
First cylinder (6892-15665, default 6892):
Using default value 6892
Last cylinder, +cylinders or +size{K,M,G} (6892-15665, default 15665): +10G
Command (m for help): p
Device Boot Start End BlocksIdSystem
/dev/sda1 * 1 256 2048000 83Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 256 6630 51200000 8eLinux LVM
/dev/sda3 6630 6891 2102933+83Linux
/dev/sda4 6892 15665 70477155 5Extended
/dev/sda5 6892 8197 10490413+83Linux
(2)使用kpatx命令刷新分区表后,查看/proc/partitions下的分区信息
# kpartx /dev/sda5
# cat /proc/partitions
major minor#blocksname
7 0 3804160 loop0
8 0 125829120 sda
8 1 2048000 sda1
8 251200000 sda2
8 3 2102933 sda3
8 4 31 sda4
8 510490413 sda5
253 049147904 dm-0
253 1 2048000 dm-1
(3)使用mke2fs命令创建文件系统ext4
# mke2fs -t ext4/dev/sda5
(4)使用blkid命令查看
# blkid /dev/sda5
/dev/sda5: UUID="b6d1d8c9-6496-4e85-9d0f-026b3756c11e" TYPE="ext4"
(4)创建挂载点并使用mount命令挂载上去;最后编辑/etc/fstab文件
# mkdir /dev/sda5 /mnt/test
# mount /dev/sda5 /mnt/test/
# vim /etc/fstab
(5)使用mount–a命令再检查一次,使用df命令输出结果。
# mount -a
# df -h
Filesystem SizeUsed Avail Use% Mounted on
/dev/mapper/789-LogVol01
47G3.5G41G 8% /
tmpfs 491M224K 491M 1% /dev/shm
/dev/sda1 1.9G 37M 1.8G 3% /boot
/dev/sr0 3.7G 3.7G 0 100% /mnt/iso
/dev/sda5 9.8G 23M9.3G1% /mnt/test
页:
[1]