linux——(4)磁盘与文件系统管理
概念一:linux-ext2文件系统
ext2在分区的时候会分成多个组块(block group)和一个启动扇区(boot sector),每一个组块内又有superblock、File system Description、block bitmap、iNode bitmap、iNode table、data block六个部分。
boot sector:可以安装引导装载程序,利用它能做出多重引导的环境。
superblock:记录整个文件系统的相关信息大小一般为1024bytes,可以用dumpe2fs来查看。此为一个文件系统只需要一个superblock,也就是第一个blockgroup内的superblock,后面的如果有,则都是第一个的备份。
File system Description:描述block group的开始于结束block等。可以用dumpe2fs查看。
block bitmap:记录那些block是空的。
iNode bitmap :同上。
iNode table:iNode块,记录文件属性、权限以及该文件实际存放在那个block中。每个iNode固定大小为128bytes,每个文件都至少会占用一个iNode,iNode记录block号码的时候有12个直接、一个间接、一个双间接、一个三间接记录区。
data block:数据存放的位置,block的大小和数量在格式化完的时候就确定了,之后不能改变。每个block内最多只能放一个文件的数据(所以零碎的小文件有时会浪费大量的空间)。
其他:
在ext2中数据发生不一致的时候会进行数据一致性检查,通过e2fsck进行。
在ext3中会借助日志文件系统(Journaling file system)来进行快速修复。
ext4是对ext3的改进和性能提升,并没有加入明显的新的功能。
关于VFS(virtual filesystem switch):我们在进入不同的文件系统读取文件的时候并没有显示指明我们使用的文件系统类型,但是系统还是能正常读取文件,就是因为有VFS的存在,它帮我们选取了恰当的文件系统进行操作。
概念二:两种连接文件
hard link:只是在某个目录下新建一条文件名连接到某iNode号码的关联记录而已,所以一般情况下,创建hard link不会导致新的iNode和block被占用,除非写新记录的目录刚好满了。删除任意一个hard link并不会影响其他hard link对文件的读取,删除源文件也不会。直到所有的hard link被删除,源文件才会被真正的删除。hard link不能跨文件系统也不能连接到目录。
symbolic link:和window的快捷方式很像,会单独新建一个文件,占用iNode和block,block里面记录了指向源文件名地址的信息,当源文件被删除后这些symbolic link就会全部失效。
相关命令:
ln [-sf] 源文件 目标文件 #产生连接文件,默认产生的是hard link。
-s #加上这个参数,产生的就是symbolic link。
-f #如果目标文件存在则删除然后再创建。
概念三:/etc/fstab和/etc/mtab的作用与区别
/etc/fstab:记录静态文件系统信息,记录了文件系统的挂载相关信息,开机的时候,linux都会检查这个文件,按照里面的记录对文件系统进行挂载。
/etc/mtab:动态记录当前系统的挂载情况,mount与umount都会影响其记录。
详细可以参考下面的博客
http://blog.163.com/qimeizhen8808@126/blog/static/165119518201281892121501/
文件系统的简单操作:
磁盘目录与容量:
df [-ahTi] 目录或文件名 #列出文件系统的整体磁盘使用量,这个的信息来源为superblock,什么目录都不写会默认将所有文件系统的情况列出来,列出某个目录或文件系统时,会列出所在文件系统的信息。
-a #列出所有的文件系统,包括系统特有的/proc等文件系统。
-h #以人们较易阅读的GB、MB、KB等格式自行显示。
-T #连同该分区的文件系统名称也显示出来。
-i #不用硬盘容量而是用iNode的数量来显示大小。
du [-ahsS] 目录或文件名 #统计目录与其子目录的大小,不写目录文件名的时候统计当前路径。
-a #列出当前目录下所有目录下,包括系统特有的/proc等文件系统。
-h #以人们较易阅读的GB、MB、KB等格式自行显示。
-s #列出目录的总大小。
-S #不包括子目录下的统计信息,只统计每个目录“自己”所占用的大小。
磁盘分区、格式化、检验与挂载。
磁盘分区:
fdisk [-l] 设备名称 #之后会进入fdisk的菜单,跟着菜单就能完成分区。
-l #列出此设备的分区表。
格式化:
mkfs [-t 文件系统格式名] 设备文件名 #只需指定文件系统,会用默认设置来进行初始化。
如果我们想自己定义文件系统的卷标、block大小、iNode数量,则我们可以用以下的命令。
mke2fs [-b block大小] [-i 每多少bytes分配一个iNode] [-L 卷标] [-cj] 设备文件名
-b #设置block大小,支持1024、2048、4096bytes。
-i #每多少bytes分配一个iNode。
-L #卷标名称。
-c #写一个-c会进行快速读取测试,写-c -c会进行读写测试。
-j #不写j格式化为ext2,写了j格式化为ext3。
磁盘检查:
fsck [-t 文件系统] [-AayC] 设备名称 #用来检查与修正文件系统错误的指令,因为fsck扫描硬盘时有可能造成文件系统的损坏,所以使用这个命令时,分区一定要处于未挂载的状态。
-t #输入要检查的文件系统类型,现在不输入一般也行。
-A #依据/etc/fstab的内容,将需要扫描的设备扫描一次。
-a #自动修复有问题的扇区,不用人工确认。
-y #同a,但是有的文件系统只支持y不支持a。
-C #可以显示一个直方图提示进度。
badblocks [-svw] #用于检查坏轨,但是现在用的很少,因为格式化阶段一般有这个过程。
-s #显示进度。
-v #显示进度。
-w #用写入的方式检查,不建议使用。
磁盘挂载与卸载:
mount #虽然参数很多,但是一般可以不用,正真使用起来还是很简单的,这个命令还能用来挂载CD、DVD、U盘、软盘,另外当系统出错时,可以用这个命令重新挂载目录。
用法一:mount [设备名称/Label(卷标)] 目录 [-o] #将设备挂载到目录上-o后面接额外命令,可接命令如下(部分)。
ro,rw:文件系统只读,或者可读写。
async,sync:文件系统采用异步或者同步内存机制。
auto,noauto:允许次分区被mount -a自动挂载。
dev,nodev:是否允许在这个分区上创建设备文件。
suid,nosuid:是否可以包含suid、sgid文件。
exec,noexec:是否可以包含可执行文件。
user,nouser:是否可让一般用户在此分区上执行monut。
#注:默认值为,rw,suid,dev,exec,auto,nouser,async。
用法二:mount -a #依照配置文件/etc/fstab的数据将所有为挂载的设备都挂载上。
用法三:mount [-l] #只输入mount时,会列出所有的挂载信息,加上-l时会加上label。
用法四:mount -o remount,rw,auto / #单独列出这个是因为这个命令很有用,在文件系统出问题的时候可以用这个命令重新挂载,这里写的是重新挂载根目录的情况,另外还带了一下其他参数。
umount 设备文件名或者挂载点 #卸载
磁盘参数修改:
mknod 设备文件名称 [bcp] [Major] [Minor](设置主设备号和次设备号)
b #设置设备为一个外部存储设备,如硬盘等。
c #设置设备为一个外部输入输出设备,如鼠标等。
p #设置成fifo文件。
e2label 设备名称 新的Label # 修改卷标
tune2fs -j 设备名称 # 可以将ext2转换成ext3,还有其他一些功能未列出。
hdparm [-tT] 设备名称 #测试硬盘性能,另外对IDE接口的硬盘有一些作用这里未说明。
-t #测试硬盘实际访问性能。
-T #测试cache 的访问性能。
开机挂载:直接修改/etc/fstab这个文件即可。
特殊设备loop挂载:我们同样可以对文件进行挂载,如将一个镜像文件进行挂载,这样就可以直接读取内部文件,或者我们新建一个大文件,对这个文件进行格式化(用mkfs)后,将这个文件挂载,当做一个分区使用。
mount -o loop 文件 挂载点 #将iso文件或者格式化过的文件挂载到挂载点。
构建swap:分为四个步骤,分区(fdisk),格式化(mkswap),使用(swapon,swapoff),查看(free),当然我们也可以使用文件来构建swap,就是4中说的特殊设备挂载。
分区:和正常分区的区别就是需要修改system id 为82。
格式化:mkswap 设备名 #格式化为swap。
使用 :swapon 设备名 #启动。
停用:swapoff 设备名 #停用。
查看:free #列出内存情况。
其他问题:
1,当分区大小高与2TB的时候,就不能用fdisk了,需要用GNU的parted,暂时不介绍。
2,boot sector与super block的关系:superblock与boot sector大小都为1024bytes,当block大小为1024时,第一个block是boot sector ,第二个是superblock,当block是2048是,他们会在同一个block。
参考资料:《鸟哥的Linux私房菜》
linux——(4)磁盘与文件系统管理的更多相关文章
- linux(3)磁盘与文件系统管理/查看硬盘、内存空间/文件系统的操作/ 文件的压缩和打包
一.磁盘与文件系统管理 1.分区与文件系统分区:记录每一个分区的开始柱面和结束柱面主引导区(master boot recorder):记录分区的数据,记录硬盘里所有的分区信息分区划分好后,要将分区格 ...
- Linux之磁盘与文件系统管理
磁盘及文件系统管理详解 [参考文献:马哥视频] 原文:http://blog.csdn.net/u013008795/article/details/51150075 目前市场上主流的磁盘是机械式硬盘 ...
- Linux磁盘与文件系统管理笔记
### Linux磁盘与文件系统管理 linux 最传统的文件系统格式是EXT2,centos7 默认文件系统是xfs(日志式文件系统) 磁盘的组成: 盘片 机械手臂 主轴马达 (机械硬盘) 磁盘格式 ...
- Linux入门-3 Linux磁盘及文件系统管理
1. 磁盘基本概念 1.1 磁盘结构:盘片(单碟vs多碟).磁头(读写数据) 1.2 磁盘在Linux中的表示 1.3 分区概念 2 使用fdisk进行磁盘管理 3 Linux文件系统 mke2fs ...
- Linux学习笔记—Linux磁盘与文件系统管理(转载)
认识EXT2文件系统 文件的系统特性 Linux的正规文件系统为Ext2 文件数据除了文件实际内容外,还包括其他属性(文件权限.文件属性). 文件系统将这两部分数据分别存放在不同的块,权限和属性放在i ...
- Linux学习笔记之Linux磁盘及文件系统管理笔记
Linux磁盘及文件系统管理 CPU,memory(RAM),I/O i/o: disks,ehtercard disks:持久存储数据 接口类型: IDE(ata): 并口,133MB/s;并行总线 ...
- Linux磁盘与文件系统管理概要
Linux磁盘与文件系统管理 硬盘组成与分区 硬盘组成 圆形的盘片(主要记录数据) 机械手臂与磁头(可读取盘片上的数据) 主轴马达,转动盘片,让机械手臂的磁头在盘片上读取数据 扇区(Sector)为最 ...
- 磁盘及文件系统管理(以及btrfs)
Linux系统管理 磁盘分区及文件系统管理 raid lvm 网络属性管理 程序包管理 sed及awk 进程查看和管理 内核管理(内核的编译和安装) 系统启动流程 定制,编译内核,busybox 系统 ...
- Linux磁盘及文件系统管理
在LINUX中我们知道一个很重要的概念,那就是"一切皆文件",这里的一切表示所有在LINUX系统的对象,自然也包括了LINUX中的硬盘设备.在LINUX中所有设备都被抽象成一个文件 ...
随机推荐
- uva 1639 Candy (对数处理精度)
https://vjudge.net/problem/UVA-1639 有两个盒子各有n(n≤2*10 5 )个糖,每天随机选一个(概率分别为p,1-p),然后吃一颗糖. 直到有一天,打开盒子一看,没 ...
- 2-sat基础题 uvalive 3211
蓝书325页的基础题 二分+2-sat //看看会不会爆int!数组会不会少了一维! //取物问题一定要小心先手胜利的条件 #include <bits/stdc++.h> using n ...
- CF540 D 概率 DP
石头剪刀布三种生物(?) 随机战斗,最后三方各自只有自己方存活下来的概率是多少. 局面的转移明显,注意任选两方决定战斗时有可能出现选了同个种类的,因此注意排除掉同种的组合,也就是条件概率什么的. /* ...
- Android Studio 更新失败的解决办法
编辑$ANDROID_STUDIO_HOME/bin/ 下的 studio.exe.vmoptions(如果系统用的Ubuntu,文件应该是studio.vmoptions或者如果是64位系统,应该是 ...
- Java实现JsApi方式的微信支付
要使用JsApi进行微信支付,首先要从微信获得一个prepay_id,然后通过调用微信的jsapi完成支付,JS API的返回结果get_brand_wcpay_request:ok仅在用户成功完成支 ...
- Tomcat处理一个http请求的过程
假设来自客户的请求为: http://localhost:8080/wsota/wsota_index.jsp 1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Con ...
- c# asp.net 调用系统设置字体文本框
一,调用系统字体文本框 首先在bin文件夹右击--添加引用--.net标签里选择System.Windows.Forms--确定 然后在cs文件里引入,using System.Windows.For ...
- Spring Boot中使用MongoDB数据库
前段时间分享了关于Spring Boot中使用Redis的文章,除了Redis之后,我们在互联网产品中还经常会用到另外一款著名的NoSQL数据库MongoDB. 下面就来简单介绍一下MongoDB,并 ...
- 设计模式之Proxy
设计模式总共有23种模式这仅仅是为了一个目的:解耦+解耦+解耦...(高内聚低耦合满足开闭原则) 为什么要使用Proxy? 1.授权机制 不同级别的用户对同一对象拥有不同的访问权利. 2.某个客户端不 ...
- perl6正则 1: ~~ , //, m//, rx//
~~ perl6 中, 要匹配一个正则, 使用 ~~ 智能匹配符. > so 'abcde' ~~ /a.c/ True > so 'abcde' ~~ /a.d/ False > ...