Linux基础之文件系统 原

一、Ext2/Ext3/Ext4区别

这三个都是文件系统格式NTFS和FAT32。

Linux kernel自2.6.28开始正式支持新的文件系统Ext4,Ext4是Ext3的改进版,修改了Ext3中部分重要的数据结构。Ext3对Ext2,只是增加了一个日志功能而已。Ext4可以提供更佳的性能和可靠性,还有更为丰富的功能,更大的文件系统和更大的文件。较之Ext3所支持的最大16TB文件系统和最大2TB文件,Ext4分别支持1EB(1,048,576TB,1EB=1024PB,1PB=1024TB)的文件系统,以及16TB的文件。

1、无限数量的子目录

Ext3只支持32,000个子目录,而Ext4支持无限数量的子目录。

2、Extents(区段)

Ext3采用间接块映射,当操作大文件时,效率极其低下。比如一 个100MB大小的文件,在Ext3中要建立25,600个数据块(每个数据块大小为4KB)的映射表。在Ext3中,每个物理块都需要一个逻辑块结构与之相对应。

Ext4引入了extents概念,提高效率,每个extent为一组连续的数据块,理想情况下,上述文件则表示为只需要一个extent来记录映射关系。

3、多块分配

当写入数据到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块,写一个100MB文件就要调用25600次数据块分配器,而Ext4的多块分配器“multiblockallocator”(mballoc)支持一次调用分配多个数据块。

4、延迟分配 

Ext3的数据块分配策略是尽快分配,而Ext4是尽可能地延迟分配,直到文件在cache中写完才开始分配数据块并写入磁盘。如此能优化整个文件的数据块分配,显著提升性能。

5、快速fsck(文件系统检查)

老的fsck会很慢,因为它要检查所有的inode,Ext4给每个组的inode表中都过它们而只去检查那些在用的inode添加了一份未使用inode的列表,执行 fsck就可以跳过它们而只去检查那些在用的inode。

6、日志校验

日志是最常用的部分,也极易导致磁盘硬件故障,而从损坏的日志中恢复数据会导致更多的数据损坏。

Ext4的日志校验功能可以很方便地判断日志数据是否损坏,将过去两阶段日志机制合并成一个阶段,提高性能。

补充,两阶段提交:

    (1)文件系统将准备执行的事务的具体内容写入日志。

    (2)文件系统进行文件操作。

    (3)操作成功后,将事务具体的内容从日志中删除。

7、“无日志”(NoJournaling)模式

Ext4允许关闭日志,以便某些有特殊需求的用户可以借此进一步提升性能。

8、在线碎片整理

Ext4支持在线碎片整理,并提供e4defrag工具进行个别文件或整个文件系统的碎片整理。

9、inode相关特性

Ext4支持更大的inode,较之Ext3默认的inode大小128字节,Ext4为了在inode中容纳更多的扩展属性(如纳秒时间戳或inode版本),默认inode大小为256字节。

10、持久预分配(Persistentpreallocation)

P2P软件为了保证下载文件有足够的空间存放,常常会预先创建 一个与所下载文件大小相同的空文件,以免未来的数小时或数天之内磁盘空间不足导致下载失败。Ext4在文件系统层面实现了持久预分配并提供相应的API,比应用软件自己实现更有效率。

二、swap

1、Swap(交换分区)概述

使用磁盘存储内存不够而“溢出来”的内容。 当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。

最容易成为被释放的对象:一些很长时间没有什么操作的程序。被保存到Swap空间中。等到那些被换出的程序要继续运行时,再从Swap中恢复保存的数据到内存中。

一般来说可以按照如下规则设置swap大小:

8G以内的物理内存,SWAP设置为内存的2倍。

8G-16G以内的的物理内存,SWAP等于内存大小或者设置为8G。

16G-256G的物理内存,SWAP设置为实际内存的1/2即可。

2、系统如何使用swap

实际上,并不是等所有的物理内存都消耗完毕之后,才去使用swap的空间,什么时候使用是由swappiness参数值控制。

[root@localhost ~]# cat /proc/sys/vm/swappiness
60
[root@localhost ~]#

默认值是60。swappiness=0的时候表示最大限度使用物理内存,然后才是swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

3、修改swap参数 

1.临时性修改

使用命令:sysctl,可以进行临时修改swap的使用比例。

命令格式:sysctl vm.swappiness=0-100的数字

示例:

[root@localhost ~]# sysctl vm.swappiness=10 
vm.swappiness = 10 
[root@localhost ~]# cat /proc/sys/vm/swappiness 
     10 

这里我们的修改已经生效,但是如果我们重启了系统,又会变成60。

2.永久修改

在/etc/sysctl.conf 文件里添加如下参数:vm.swappiness=10。 vim /etc/sysctl.conf ->i->修改 esc->wq。

4、swap开启与关闭

swapon -a #开启
swapoff -a #关闭

三、文件系统的操作

1、挂载点的意义

每个文件系统都有独立的inode/block/superblock等信息,这个文件系统要能够链接到目录树才能被我们使用。将文件系统和目录树结合的动作我们称为挂载。

挂载点:一定是目录,此目录为文件系统的入口。

2、挂载操作

mount命令:将设备挂载到某个目录。

命令格式:mount [-fnrsvw] [-o option[,option]...] 设备文件 挂载点

1.选项和参数

-t:指定设备的文件系统类型。

ext4 linux目前常用的文件系统。

nfs网络文件系统。

iso9660 CD-ROM光盘标准文件系统。

auto自动检测文件系统 

-o:指定挂载文件系统时的选项。

ro以只读方式挂载。

rw以读写方式。

2.挂载镜像文件

将ISO镜像文件挂载到Linux虚拟机中,准备工作:

挂载到某个目录。

[root@localhost ~]# mount /dev/cdrom /media
[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sr0        4.2G  4.2G     0 100% /media/CentOS_6.5_Final
[root@localhost ~]# ll /dev/cdrom1 
lrwxrwxrwx. 1 root root 3 Feb  9 14:53 /dev/cdrom1 -> sr0
[root@localhost ~]# ls /media

CentOS_6.5_Final 挂载到某个目录

[root@localhost ~]# mkdir /mnt/cdrom
[root@localhost ~]# mount -t iso9660 /dev/cdrom1  /mnt/cdrom
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sr0        4.2G  4.2G     0 100% /mnt/cdrom
[root@localhost ~]# lsblk      #查看块设备
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1  4.2G  0 rom 

3.挂载U盘

[root@localhost /]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1        29G  2.3G   27G   8% /media/7E4E-815B
[root@localhost /]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1  4.2G  0 rom  
sdb      8:16   1 28.9G  0 disk 
└─sdb1   8:17   1 28.9G  0 part /media/7E4E-815B
[root@localhost /]# mkdir /mnt/udisk
[root@localhost /]# mount /dev/sdb1 /mnt/udisk/
[root@localhost /]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb      8:16   1 28.9G  0 disk 
└─sdb1   8:17   1 28.9G  0 part /media/7E4E-815B
[root@localhost /]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1        29G  2.3G   27G   8% /media/7E4E-815B
/dev/sdb1        29G  2.3G   27G   8% /mnt/udisk

如果挂载后查看U盘内容出现乱码?

[root@localhost ~]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8“
[root@localhost ~]#man mount

使用”/iocharset”查找

[root@localhost ~]# mount -o iocharset=utf8 /dev/sdb1 /mnt/udisk

Ntfs需要下载ntfs-3g驱动

yum install ntfs-3g

用完要记得使用umount“弹出”,并断开连接。

3、取消挂载

umount:取消挂载。 命令格式:umount 设备或是挂载点 示例:

umount /mnt/cdrom
#或
umount /dev/cdrom1 
#或
umount /dev/sr0

4、自动挂载

/etc/fstab文件:开机引导的时候自动挂载到linux的文件系统。

5、文件系统相关命令

1.df

df:列出文件系统整体磁盘使用情况。即整个硬盘的分区情况。相当于Windows中查看磁盘分区情况。

命令格式:df 选项参数

选项参数

-a:列出所有文件系统。

-k:以KBytes的容量显示文件系统。

-m:以MBytes的容量显示文件系统。

-h:GBytes、MBytes、KBytes等格式自行显示。

-i:以inode数量显示。

2.du

du:文件系统的磁盘使用量或是目录使用量。即具体的目录或者文件的大小详情。相当与Windows中打开我的电脑进行文件查看。

命令格式:du 选项参数 目录名称

选项参数

-a:列出所有的文件与目录容量。

-h:以人们较易读的容量格式(G/M)显示。

-s:列出总量而已,而不列出每个各别的目录占用容量。

-k:以KBytes列出容量显示。

-m:以MBytes列出容量显示。

3.dumpe2fs

dumpe2fs:观察文件系统。

命令格式:dumpe2fs [options] < device>

参数选项:

-h :仅列出superblock的数据,不会列出其他的区段内容。

#dumpe2fs  -h /dev/sda1

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券