点击返回 自学Linux命令行与Shell脚本之路

8.1-linux文件系统概述及操作

1. linux支持的文件系统

  • Windows常用的分区格式有三种,分别是FAT16、FAT32、NTFS格式
  • Linux支持的文件系统:NFS、MINIX、MS-DOS和ext2,日志文件系统:ext3、ext4、JFS、ReiserFS和XFS,同时还有加密文件系统(CFS)和虚拟文件系统(/proc)

1.1 基本文件系统

Ext:
extended filesystem扩展文件系统。
使用虚拟目录来操作硬件设备,在物理设备上按定长的块来存储数据。
ext文件系统采用索引节点的系统来存放虚拟目录中所存储的文件信息。索引节点系统在每个物理设备中创建一个单独的表(索引节点表)才存储这些文件。

存储在虚拟目录中的每一个文件在索引节点表中都有一个条目。
linux通过唯一的数值(索引节点号)来引用索引节表中的每个索引节点,这个值是创建问价时候由文件系统分配的。
文件系统时通过索引节点号而不是文件全名及路径来标识文件。

Ext2:
Ext2是GNU/Linux系统中标准的文件系统。extended filesystem扩展文件系统。
这是Linux中使用最多的一种文件系统,它是专门为Linux设计的,拥有极快的速度和极小的CPU占用率。
Ext2既可以用于标准的块设备(如硬盘),也被应用在软盘等移动存储设备上。

1.2 日志文件系统

日志式文件系统(Journal File System),为linux系统增添了一层安全性。

  • 之前是先将数据直接写入存储设备再更新索引节点表
  • 现在是先将文件的更改写入到临时文件(就是日志)中,以便有需要时回溯追踪
    且当在某个过程中断时,系统可以根据这些记录直接回溯并重整被中断的部分,重整速度相当快。

linux系统广泛使用3中日志系统方法(数据模式>有序模式>回写模式):

  • 数据模式:索引节点和文件都会被写入日志;丢失数据风险低,但性能差(安全性好,速度最慢,每次写两次数据,第一次写入日志,第二次写入真正的存储设备)
  • 有序模式:只有索引节点会被写入日志,但只有数据成功写入后才删除;在性能和安全性之间区中
  • 回写模式:只有索引节点会被写入日志,但不控制文件数据何时写入;丢失数据风险高,但仍然比不用日志好

Ext3:
Ext3是Ext2的下一代,也就是保有Ext2的格式之下再加上日志功能。
Ext3是现在几乎所有linux发行版默认的文件系统。
Ext3采用和Ext2相同的索引节点表结构,但是给每个存储设备增加了一个日志文件,以便将准备写入存储设备的数据先写入日志。
Ext3默认情况下采用有序模式。
缺点:
    Ext3文件系统无法恢复误删的文件。
    Ext3文件系统没有任何内建的数据压缩功能。
    Ext3文件系统不支持加密
Ext4:
Ext4大多数流行的liunx发行版系统默认采用,比如Ubantu
Ext4文件系统支持数据压缩和加密。
Ext4文件系统支持一个称作区段的特性,在索引节点表中节省了一些空间。
Ext4文件系统引进了块预分配技术。

Reiser:

Reiser文件系统,2001年
Reiser文件系统只支持回写日志模式。
Reiser文件系统引进2个特性:  可以在线调整已有文件系统的大小  和 尾部压缩技术。
JFS:
JFS文件系统只有在IBM linux系统使用。
JFS文件系统采用有序日志模式。
XFS:
XFS文件系统采用回写日志模式。
XFS文件系统允许在线调整已有文件系统的大小,但是XFS文件系统只能扩大不能缩小。

1.3 写时复制文件系统Copy-On-Write

  • COW技术利用快照兼顾了安全性和性能。
  • 如果要修改数据会使用克隆或可写快照。
  • 修改过的数据并不会直接覆盖当前数据,而是被放入文件系统中的另一个位置上,即便数据修改已经完成之前的数据也不会被重写
    (这样的好处是一旦系统突然断电,重启之后不需要做Fsck)
  • 最流行的cow是Btrf 和 ZFS

ZFS系统:
2005年研发,OpenSolaris操作系统使用
最大缺点:没有GPL许可

Btrf 系统:
btrfs在Reiser4的诸多特性的基础上做了可靠性改进。
OpenSUSE Linux发行版将btrfs最为默认文件系统。

2. linux文件系统的操作

2.1 创建分区

什么是分区?
分区是将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当做一个独立的磁硬使用。分区表是一个硬盘分区的索引,分区的信息都会写进分区表。

为什么要有多个分区?

  • 防止数据丢失:如果系统只有一个分区,那么这个分区损坏,用户将会丢失所的有数据。
  • 增加磁盘空间使用效率:可以用不同的区块大小来格式化分区,如果有很多1K的文件,而硬盘分区区块大小为4K,那么每存储一个文件将会浪费3K空间。
                             这时需要取这些文件大小的平均值进行区块大小的划分。
  • 数据激增到极限不会引起系统挂起:将用户数据和系统数据分开,可以避免用户数据填满整个硬盘,引起的系挂起。

分区类型 :

  • 主分区:总共最多只能分4个 ,主分区可以直接格式化
  • 扩展分区:只能有1个,也算主分区的一种,也就是说主分区+扩展分区最多只能有4个,但是扩展分区不能存储数据和格式化,必须再划分为逻辑分区才可用
  • 逻辑分区:逻辑分区是在扩展分区中划分的,如果是IDE硬盘,Linux最多支持59个逻辑分区,如果是SCSI硬盘,Linux最多支持11个逻辑分区

 fdisk工具的操作界面:

fdisk命令提示符下可以使用(常用):

  • m :显示菜单和帮助信息
  • a :活动分区标记/引导分区
  • d :删除分区
  • l :显示分区类型
  • n :新建分区
  • p :显示分区信息
  • q :退出不保存
  • t :设置分区号
  • v :进行分区检查
  • w :保存修改
  • x :扩展应用,高级功能

 sudo fdisk /dev/sda1

这块硬磁尚未分区,按"n"键新建一个分区。

出现两个菜单e表示扩展分区,p表示主分区
 按"p"键出现提示:"Partition number (1-4): "选择主分区号
 输入"1"表示第一个主分区。

这样一个主分区就分好了。
接下来分第二个主分区,把剩余空间都给第二个主分区。
按"n"
键新增一个分区
按"p"键设为主分区
输入"2"把主分区编号设为2
按两下回车把剩余空间分给第二个主分区。
按"p"键打印分区表

然后通过w将更改保存在存储设备上面。

3. 创建文件系统

在将数据存储到分区之前,必须将某种文件系统对其进行格式化,这样linux才能使用它。每种文件系统类型都用自己的命令行程序来格式化分区。
 为分区创建了文件系统之后,下一步是将它挂载到虚拟目录下的某个挂载点,这样就可以将数据存储在新文件系统中了。

mkfs -t fstype /dev/part

  • mkfs -t ext4   =    mkfs.ext4   =   mke2fs -t ext4
  • mkfs -t ext3   =   mkfs.ext3    =   mke2fs -j   =  mke2fs -t ext3
  • mkfs -t ext2   =    mkfs.ext2   =   mke2fs      =  mke2fs -t ext2

mke2fs [-b block大小] [-i inode大小] [-L 标头] [-cj] 装置
选项与参数:

  • -b :可以配置每个 block 的大小,目前支持 1024, 2048, 4096 bytes 三种;
  • -i :多少容量给予一个 inode 呢?
  • -c :检查磁盘错误,仅下达一次 -c 时,会进行快速读取测试;
            如果下达两次 -c -c 的话,会测试读写(read-write),会很慢~
  • -L :后面可以接标头名称 (Label),这个 label 是有用的喔!e2label命令介绍会谈到~
  • -j :本来 mke2fs 是 EXT2 ,加上 -j 后,会主动加入 journal 而成为 EXT3。

要想知道某个文件系统工具是否可用,使用type命令

以上表示btrfs文件系统不存在,ext2 ext3 存在。

tune2fs是调整和查看ext2/ext3文件系统的文件系统参数,Windows下面如果出现意外断电死机情况,下次开机一般都会出现系统自检。
Linux系统下面也有文件系统自检,而且是可以通过tune2fs命令,自行定义自检周期及方式。

参数 用途
-l 显示文件系统超级块信息
-L label 重新设定卷标
-m  调整预留给管理使用的块所占据总体空间比例
-r 调整预留给管理使用的块的个数
-o 设定挂载默认选项
-O 设定文件系统默认特性
-E 调整文件系统的扩张属性

tune2fs -r 40000 /dev/sdb1 调整/dev/sdb1分区的保留空间为40000个磁盘块

tune2fs  -o acl,user_xattr /dev/sdb1 设置/dev/sdb1挂载选项

启用Posix Access Control Lists和用户指定的扩展属性

开机取消自检:

tune2fs -l /dev/sdb1 | grep -E ‘Maximum mount count:|Check interval’
tune2fs -i 0 -c 0 /dev/sdb1

磁盘分区步骤:

  • fdisk /dev/sdb 新建分区
  • partprode 更新分区表
  • mkfs.ex4 /dev/sdb{1..3}  格式化制作文件系统
  • mkdir  /sdb1 创建目录
  • mount /dev/sdb1   /sdb1 挂载

3. 文件系统的检查与修复

fsck命令能够检查和修复大部分类型的Linux文件系统。 

fsck [-t 文件系统] [-ACay] 装置名称
选项与参数:

  • -t :如同 mkfs 一样,fsck 也是个综合软件而已!因此我们同样需要指定文件系统。
  • 不过由于现今的 Linux 太聪明了,他会自动的透过 superblock 去分辨文件系统,因此通常可以不需要这个选项的啰!请看后续的范例说明。
  • -A :依据 /etc/fstab 的内容,将需要的装置扫瞄一次。/etc/fstab 于下一小节说明,通常启动过程中就会运行此一命令了。
  • -a :自动修复检查到的有问题的扇区,所以你不用一直按 y 啰!
  • -y :与 -a 类似,但是某些 filesystem 仅支持 -y 这个参数!
  • -C :可以在检验的过程当中,使用一个直方图来显示目前的进度!

EXT2/EXT3 的额外选项功能:(e2fsck 这支命令所提供)

  • -f :强制检查!一般来说,如果 fsck 没有发现任何 unclean 的旗标,不会主动进入细部检查的,如果您想要强制 fsck 进入细部检查,就得加上 -f 旗标啰!
  • -D :针对文件系统下的目录进行优化配置。

自学Linux Shell8.1-linux文件系统概述及操作的更多相关文章

  1. Linux基础命令之文件和目录操作(一)

    pwd print working directory的缩写,作用是显示当前工作目录的绝对路径,一般进行频繁切换路径时使用. -L 显示逻辑路径(或略软链接文件),不常用. -P 显示物理路径,不常用 ...

  2. linux中批量添加文件前缀的操作

    需要在文件夹内所有txt文件的文件名前面添加"gt_"; 就是由原来的文件“xxx.txt”变成“gt_xxx.txt”: 网上搜来的脚本如下: for i in `ls`; do ...

  3. Linux记录-lsof打开文件工具常用操作

    lsof `which httpd` //那个进程在使用apache的可执行文件 lsof /etc/passwd //那个进程在占用/etc/passwd lsof /dev/hda6 //那个进程 ...

  4. Linux基础命令之文件和目录操作(二)

    . find 用于查找目录下的文件,也可以调用其他命令使用 find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] fi ...

  5. Linux 用户管理 与 文件权限

    Linux 用户管理 与 文件权限 用户组操作 1.groupadd命令 groupadd [-g -o] gid group 各个选项具体含义如下: -g:指定新建用户组的GID号,该GID号必须唯 ...

  6. Linux文件系统概述

    Unix文件是以字节序列组成的信息载体(container),内核不解释文件的内容. Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有系统的结构,所有Linux用户和程序 ...

  7. Linux 虚拟文件系统概述

    转自:http://blog.csdn.net/u011373710/article/details/70198080 文章梗概 本文首先以“尽量不涉及源代码”的方式讨论Linux虚拟文件系统的存在的 ...

  8. Linux系统文件系统及文件基础篇

    学习Linux,重难点在于掌握不同类别的文件系统及其作用.通过对Linux系统的安装,我们首先来了解下Linux系统里各个目录文件夹下的大致功能:主要的目录树的有/./root./home./usr. ...

  9. Linux的3个文件时间

    文件的三个时间相信大家都已经很熟悉windows操作系统了,当我们在windows系统下创建一个文件时,系统同时会为这个文件建立相关的参数去描述这个文件,如图: 这些参数包括文件的大小,文件类型,位置 ...

随机推荐

  1. China Intelligent Office Summit(2018.11.21)

    时间:2018.11.21地点:中关村软件园国际会议中心

  2. 51Nod 1815 调查任务

    发现绍一的人很喜欢做51nod,不得不说这还是一个很全能的良心OJ 但是做的这道题就一点都不良心了,简直是毒瘤,调了一早上 首先我们考虑让一条路径的\(a_x\ mod\ a_y\)的值最大,我们简单 ...

  3. SSL踩坑ERR_SSL_VERSION_OR_CIPHER_MISMATCH

    最近公司项目开发了一个微信小程序,并且部署测试OK,由于微信小程序调用的后端接口必须是HTTPS,所以给接口安装了SSL,第一天测试都正常.第二天早上再使用时页面无响应. 抓包发现是后端接口抛出: n ...

  4. hibernate 解决 java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.internal.engine.xxx 这类的问题

    <!-- 解决 java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.intern ...

  5. .NetCore实践篇:分布式监控系统zipkin踩坑之路(二)

    前言 <牧神记>有一句话说的好,破心中神.当不再对分布式,微服务,CLR畏惧迷茫的时候,你就破了心中神. zipkin复习 第一篇: .Net架构篇:思考如何设计一款实用的分布式监控系统? ...

  6. C#大型电商项目优化(三)——扩展性与支付

    上一篇文章引来不少非议,笔者并非对EF有看法,而是针对不同的业务场景和框架背景,挑选不同的方案.每个方案都有其优势劣势,挑选最快速,最简单的方案,是笔者的初衷. 看评论也是学习的过程,然而有些只做评价 ...

  7. Linux下DNS简单部署(主从域名服务器)

    一.DNS简介DNS(Domain Name System),域名系统,因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.通 ...

  8. 使用rem进行自适应页面布局

    设计师给到我们前端的设计稿一般是按照iphone6屏幕(iphone6 两倍屏 设备 分辨率(物理尺寸) 屏幕宽高 PPI 状态栏高度 导航栏高度 标签栏高度 iPhone6 750×1334 px ...

  9. 剑指offer:二叉树中和为某一值的路径

    本来这只是一个普通的算法题,但是当初自己OJ上提交时,总是提交失败,而我自己认定程序逻辑没有任何问题.然后开始就在本机上调试,结果发现这是由于Python的对象机制而引发的.所以先把问题算法题贴出来, ...

  10. JS中的跨域问题

    一.什么是跨域? 1.定义:跨域是指从一个域名的网页去请求另一个域名的资源.比如从www.baidu.com 页面去请求 www.google.com 的资源.但是一般情况下不能这么做,它是由浏览器的 ...