2.1、文件系统的分类
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。常见的文件系统主要有:
基本文件系统: Ext2, Ext3, Ext4, Reiserfs, xfs, JFS, NTFS
交换分区: swap
集群文件系统: GFS2, OCFS2
网络文件系统: NFS, smbfs(CIFS)
光盘: iso9660
文件系统 | 主要特点 |
NTFS | NTFS文件系统是一个基于安全性的文件系统,是Windows NT所采用的独特的文件系统结构,它是建立在保护文件和目录数据基础上,同时照顾节省存储资源、减少磁盘占用量的一种先进的文件系统。 |
Ext2 |
Ext是 GNU/Linux 系统中标准的文件系统,其特点为存取文件的性能极好,对于中小型的文件更显示出优势,这主要得利于其簇快取层的优良设计。 其单一文件大小与文件系统本身的容量上限与文件系统本身的簇大小有关,在一般常见的 x86电脑系中,簇最大为 4KB,则单一文件大小上限为 2048GB,而文件系统的容量上限为 16384GB。 |
Ext3 | Ext3是一种日志式文件系统,是对ext2系统的扩展, 兼容ext2。 优越性在于:由于文件系统都有快取层参与运作, 如不使用时必须将文件系统卸下,以便将快取层的资料写回磁盘中。 因此每当系统要关机时,必须将其所有的文件系统全部shutdown后才能进行关机 。 |
Ext4 | Ext4 是 Ext3 的改进版。更大的文件系统和更大的文件。无限数量的子目录。 |
Reiserfs | 其特色为能很有效率地处理大型文件到众多小文件都可以用很高的效率处理;实务上 ReiserFS 在处理文件小于 1k 小文件时,甚至效率可以比ext3快约10倍。 |
XFS | 作为 SGI 基于 IRIX 的产品(从工作站到超级计算机)的底层文件系统来使用。一种健壮的、优秀的以及功能丰富的文件系统,并且这种文件系统所具有的可伸缩性能够满足最苛刻的存储需求。 |
JFS |
JFS( JOURNAL FILE SYSTEM),一种字节级日志文件系统,借鉴了数据库保护系统的技术,以日志的形式记录文件的变化。JFS通过记录文件结构而不是数据本身的变化来保证数据的完整性。这种方式可以确保在任何时刻都能维护数据的可访问性。 该文件系统主要是为满足服务器(从单处理器系统到高级多处理器和群集系统)的高吞吐量和可靠性需求而设计、开发的 |
GFS | GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,并提供容错功能。它可以给大量的用户提供总体性能较高的服务。 |
OCFS2 | OCFS2是下一代的Oracle集群文件系统,它已经被设计成为一种为通用的文件系统。OCFS2能使运行在集群中所有节点并发的通过标准文件系统接口来访问存储备。 |
NFS | NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。 |
smbfs(CIFS) | CIFS 是一个新提出的协议,它使程序可以访问远程Internet计算机上的文件并要求此计算机提供服务。CIFS 使用客户/服务器模式。 |
iso9660 | ISO 9660文件系统(file system)是一个标准的CD-ROM文件系统,它允许您在PC、Mac和其它主要计算机平台上读取CD-ROM文件。 |
SWAP | Linux中Swap(即:交换分区),类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。 |
2.2、ext2文件系统
文件系统示意图:
- 超级块(Super Block):整个分区的文件系统信息,主要信息有:
block 与 inode 的总量 未使用与已使用的 inode / block 数量 block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128 bytes) filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等文件系统的相关信息 一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1 |
- 块组描述符表(GDT,Group Descriptor Table):存储一个块组的描述信息
- 块位图(Block Bitmap):描述整个块组中哪些块已用哪些块空闲的
- inode 位图( inode Bitmap):每个bit表示一个inode是否空闲可用
- inode 表(inode Table):文件描述信息
该文件的存取模式(read/write/excute); 该文件的拥有者与群组(owner/group); 该文件的容量; 该文件创建或状态改变的时间(ctime); 最近一次的读取时间(atime); 最近修改的时间(mtime); 定义文件特性的旗标(flag),如 SetUID...; 该文件真正内容的指向 (pointer); |
- 数据块(Data Block):存放数据
2.3、创建文件系统命令mkfs/mke2fs
Ext4: mkfs -t ext4 = mkfs.ext4 = mke2fs -t ext4
Ext3: mkfs -t ext3 = mkfs.ext3 = mke2fs -t ext3 = mke2fs -j
mke2fs: 创建 ex2 系列的文件
选项: -j: 创建ext3类型文件系统 -L:指定分区卷标 -t: {ext2|ext3|ext4} -N#:指定 inode 个数; -F: 强制创建文件系统 -E: 用户指定额外文件系统属性 配置文件:/etc/mke2fs.conf |
[[email protected] ~]# fdisk /dev/vdb #创建分区 WARNING: DOS-compatible mode is deprecated. It‘s strongly recommended to switch off the mode (command ‘c‘) and change display units to sectors (command ‘u‘). Command (m for help): m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition‘s system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only) Command (m for help): n #新建一个主分区 Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-20805, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-20805, default 20805): +2G Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [[email protected] ~]# cat /proc/partitions major minor #blocks name 252 0 20971520 vda 252 1 20970496 vda1 252 16 10485760 vdb 252 17 2097616 vdb1 253 0 5243584 dm-0 253 1 2097648 dm-1 253 2 1 dm-2 253 3 102784 dm-3 [[email protected] ~]# mke2fs -j /dev/vdb1 #对分区进行格式化,即创建文件系统 mke2fs 1.41.12 (17-May-2010) /dev/vdb1 is apparently in use by the system; will not make a 文件系统 here! [[email protected] ~]# dmsetup status vdb5: 0 205569 linear vdb4: 0 2 linear vdb2: 0 4195296 linear vdb1: 0 10487169 linear [[email protected] ~]# dmsetup remove_all [[email protected] ~]# mke2fs -j /dev/vdb1 mke2fs 1.41.12 (17-May-2010) 警告: 116 块未使用. 文件系统标签= 操作系统:Linux 块大小=4096 (log=2) 分块大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 131328 inodes, 524288 blocks 26220 blocks (5.00%) reserved for the super user 第一个数据块=0 Maximum filesystem blocks=536870912 16 block groups 32768 blocks per group, 32768 fragments per group 8208 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 正在写入inode表: 完成 Creating journal (16384 blocks): 完成 Writing superblocks and filesystem accounting information: 完成 This filesystem will be automatically checked every 20 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. #文件系统创建成功 [[email protected] ~]#
2.4、ext2文件系统管理命令e2label/tune2fs/dumpe2fs/e2fsck
e2label: 用于查看或定义卷标
e2label 设备文件 [卷标] |
[[email protected] ~]# e2label /dev/vdb1 ext2fs #为新建的文件系统创建卷标 [[email protected] ~]# e2label /dev/vdb1 #查看卷标 ext2fs
tune2fs: 调整文件系统的相关属性
选项: -j: 不损害原有数据,将 ext2 升级为ext3 -L: 设定或修改卷标; -m#: 调整预留超级用户的块数百分比; -r#: 指定预留块数; -o: 设定默认挂载选项; -l: 显示超级块中的信息; -c#:指定挂载次数达到#次之后进行自检,0 或-1 表关闭此功能; |
[[email protected] ~]# tune2fs -l /dev/vdb1 #查看文件系统信息 tune2fs 1.41.12 (17-May-2010) Filesystem volume name: ext2fs #卷标 Last mounted on: <not available> Filesystem UUID: a0296858-4e6a-46a9-8b7a-78e52815e702 #UUID号 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr resize_inode dir_index filetype sparse_super large_file Filesystem flags: signed_directory_hash Default mount options: (none) Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 131328 Block count: 524288 Reserved block count: 26220 Free blocks: 498867 Free inodes: 131317 First block: 0 Block size: 4096 Fragment size: 4096 Reserved GDT blocks: 127 Blocks per group: 32768 Fragments per group: 32768 Inodes per group: 8208 Inode blocks per group: 513 Filesystem created: Mon Apr 3 16:51:52 2017 Last mount time: n/a Last write time: Mon Apr 3 16:56:07 2017 Mount count: 0 Maximum mount count: 20 Last checked: Mon Apr 3 16:51:52 2017 Check interval: 15552000 (6 months) Next check after: Sat Sep 30 16:51:52 2017 Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 256 Required extra isize: 28 Desired extra isize: 28 Journal inode: 8 Default directory hash: half_md4 Directory Hash Seed: af5d9a37-ae00-404a-9dd1-3fd9556c20da Journal backup: inode blocks [[email protected] ~]# tune2fs -i 0 /dev/vdb1 #禁止时间检查 tune2fs 1.41.12 (17-May-2010) Setting interval between checks to 0 seconds [[email protected] ~]# tune2fs -L ext3fs /dev/vdb1 #更改文件系统卷标 tune2fs 1.41.12 (17-May-2010) [[email protected] ~]# e2label /dev/vdb1 ext3fs
dumpe2fs: 显示文件系统属性信息
选项: -h: 只显示超级块中的信息 -b:列出保留为坏道的部分 |
[[email protected] ~]# dumpe2fs /dev/vdb1 #查看文件系统属性 dumpe2fs 1.41.12 (17-May-2010) Filesystem volume name: ext3fs #文件系统名称 Last mounted on: <not available> Filesystem UUID: a0296858-4e6a-46a9-8b7a-78e52815e702 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr resize_inode dir_index filetype sparse_super large_file Filesystem flags: signed_directory_hash Default mount options: (none) #默认挂在参数 Filesystem state: clean #表示文件系统没有问题(clean) Errors behavior: Continue Filesystem OS type: Linux Inode count: 131328 #Inode的总数 Block count: 524288 #block的总数 Reserved block count: 26220 Free blocks: 498867 #可用block数量 Free inodes: 131317 #可用inode数量 First block: 0 Block size: 4096 #每个block的大小 Fragment size: 4096 Reserved GDT blocks: 127 Blocks per group: 32768 Fragments per group: 32768 Inodes per group: 8208 Inode blocks per group: 513 Filesystem created: Mon Apr 3 16:51:52 2017 Last mount time: n/a Last write time: Mon Apr 3 17:05:42 2017 Mount count: 0 Maximum mount count: 20 Last checked: Mon Apr 3 16:51:52 2017 Check interval: 0 (<none>) Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 256 #每个inode的大小 Required extra isize: 28 Desired extra isize: 28 Journal inode: 8 Default directory hash: half_md4 Directory Hash Seed: af5d9a37-ae00-404a-9dd1-3fd9556c20da Journal backup: inode blocks Journal features: (none) 日志大小: 64M Journal length: 16384 Journal sequence: 0x00000001 Journal start: 0 Group 0: (Blocks 0-32767) 主 superblock at 0, Group descriptors at 1-1 保留的GDT块位于 2-128 Block bitmap at 129 (+129), Inode bitmap at 130 (+130) Inode表位于 131-643 (+131) 32118 free blocks, 8197 free inodes, 2 directories 可用块数: 650-32767 可用inode数: 12-8208 Group 1: (Blocks 32768-65535) #每一个数据块的内容 备份 superblock at 32768, Group descriptors at 32769-32769 #备份超级快所在区域 保留的GDT块位于 32770-32896 Block bitmap at 32897 (+129), Inode bitmap at 32898 (+130) Inode表位于 32899-33411 (+131) 32124 free blocks, 8208 free inodes, 0 directories 可用块数: 33412-65535 可用inode数: 8209-16416 ...
e2fsck: 专用于修复 ext2/ext3 文件系统
-f: 强制检查; -p: 自动修复; -y:对问题自动回答为 yes |
2.5、查看磁盘设备属性blkid/hdparm
blkid: 查询或查看磁盘设备的相关属性
UUID(随机数,唯一标示磁盘设配) TYPE(类型) LABEL(分区卷标)
[[email protected] ~]# blkid /dev/vda1: UUID="85564546-5aae-41bf-ad64-d334c6d13f15" TYPE="ext3" /dev/vdb1: LABEL="ext3fs" UUID="a0296858-4e6a-46a9-8b7a-78e52815e702" SEC_TYPE="ext2" TYPE="ext3"
hdparm:获取或设定 SATA/IDE 设备参数
[[email protected] ~]# hdparm /dev/vdb /dev/vdb: HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device readonly = 0 (off) readahead = 256 (on) geometry = 20805/16/63, sectors = 20971520, start = 0
2.6、修复linux文件系统命令fsck
fsck: 检查并修复 Linux 文件系统
-t FSTYPE: 指定文件系统类型 -a: 自动修复 -r:交互式修复错误 |
7、 交换分区 swap
交换分区必须单独分区,相当于虚拟内存。
fdisk 创建分区,调整分区类型为 82
mkswap -L LABEL 改变分区为交换分区
swapon [OPTION]...[DEVICE]
-a:启用所有的定义在/etc/fstab文件中的交换分区 -p #:指定优先级 |
swapoff 关闭交换设备或文件
free [OPTION] 查看物理内存与交换内存使用状态
-m: 以 MB 为单位 -g: 以 GB 为单位 |
[[email protected] ~]# free -m total used free shared buffers cached Mem: 996 535 461 0 165 193 -/+ buffers/cache: 176 819 Swap: 0 0 0 第一部分Mem行: total 内存总数: 996M used 已经使用的内存数: 535M free 空闲的内存数: 461M shared 当前已经废弃不用,总是0 buffers Buffer 缓存内存数: 165M cached Page 缓存内存数:193M 关系:total(1002M) = used(769M) + free(232M) 第二部分(-/+ buffers/cache): (-buffers/cache) used内存数:176M (指的第一部分Mem行中的used – buffers – cached) (+buffers/cache) free内存数: 819M (指的第一部分Mem行中的free + buffers + cached) -buffers/cache反映的是被程序实实在在吃掉的内存, +buffers/cache反映的是可以挪用的内存总数。
分区信息: /proc/partitions
[[email protected] ~]# cat /proc/partitions major minor #blocks name 252 0 20971520 vda 252 1 20970496 vda1 252 16 10485760 vdb 252 17 5243584 vdb1 252 18 2097648 vdb2 252 20 1 vdb4 252 21 102784 vdb5 253 0 5243584 dm-0 253 1 2097648 dm-1 253 2 1 dm-2 253 3 102784 dm-3
内存信息: /proc/meminfo
[[email protected] ~]# cat /proc/meminfo MemTotal: 1020128 kB #总内存 MemFree: 473048 kB #空闲内存 Buffers: 168872 kB #缓冲区大小 Cached: 197324 kB #缓存大小 SwapCached: 0 kB #交换分区 Active: 320744 kB #活跃使用中的高速缓冲存储器页面文件大小 Inactive: 136948 kB #不经常使用的高速缓冲存储器页面文件大小 Active(anon): 91656 kB # Inactive(anon): 48 kB Active(file): 229088 kB Inactive(file): 136900 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 0 kB #交换空间的总大小 SwapFree: 0 kB #交换分区空前大小 Dirty: 76 kB #等待被写回到磁盘的内存大小 Writeback: 0 kB #正在被写回到磁盘的内存大小 AnonPages: 91512 kB #未映射页的内存大小 Mapped: 19048 kB #设备和文件等映射的大小 Shmem: 208 kB #共享内存大小 Slab: 68084 kB #内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗 SReclaimable: 48880 kB #可收回Slab的大小 SUnreclaim: 19204 kB #不可收回Slab的大小(SUnreclaim+SReclaimable=Slab) KernelStack: 1792 kB #内核堆栈大小 PageTables: 3168 kB #管理内存分页页面的索引表的大小 NFS_Unstable: 0 kB #不稳定页表的大小 Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 510064 kB Committed_AS: 363316 kB VmallocTotal: 34359738367 kB #可以vmalloc虚拟内存大小 VmallocUsed: 7152 kB #已经被使用的虚拟内存大小 VmallocChunk: 34359727228 kB HardwareCorrupted: 0 kB AnonHugePages: 38912 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 8184 kB DirectMap2M: 1040384 kB
文件系统信息:/proc/filesystems
[[email protected] ~]# cat /proc/filesystems nodev sysfs nodev rootfs nodev bdev nodev proc nodev cgroup nodev cpuset nodev tmpfs nodev devtmpfs nodev binfmt_misc nodev debugfs nodev securityfs nodev sockfs nodev usbfs nodev pipefs nodev anon_inodefs nodev inotifyfs nodev devpts nodev ramfs nodev hugetlbfs iso9660 nodev pstore nodev mqueue ext3
- Buffer 和 Cache 的区别
buffer 缓冲是为了提高内存和硬盘或其他 I/0 设备之间的数据交换的速度而设计;cache 缓存是为了提高 cpu 和内存之间的数据交换速度而设计。简单来说buffer是即将要被写入磁盘的,而cache 是被从磁盘中读出来的。