[root@localhost~]#序言
我们平时不论是买一个U盘硬盘,或者自己在电脑上创建一个分区,大小总是比我们创建的要小一点,有些人会说,这个正常啊,是因为厂家规定的1M=1000k,真正的是1M=1024k,要是这样,我这篇文章就不用写了。厂家的规格可能是一部分原因,不过我现在是以U盘硬盘,或者分区的底层来分析这个问题。


开班第十天:

[root@localhost~]#今天的课程大纲:
  1. 真正了解文件系统
  2. 分析U盘变小了的原因
  3. 如何选择date block大小
  4. 软链接,硬链接
  5. 数据恢复的原理

详细讲解:

[root@localhost~]#真正了解文件系统

  linux中叫创建文件系统,windows中习惯称呼为格式化,filesystem一种管理文件的方式,我们平时在linux中挂载本质上挂载的是文件系统。一个文件系统包括了inode block和date block,分别为索引节点块和数据块,这是在mkfs创建文件系统的时候就已经生成了。下面我用一张我手画的图来模拟一个分区的构成,不好看,大家不要介意。(实在看不清的就留言,单独给你发)
  
  再解释一下上面图,dir是一个目录索引表,这里假设我要执行cat a.txt文件,我怎么知道a.txt文件里的内容,这里我们先找到dir中a.txt对应inum是1,然后再在file中找到inum=1所对应的文件,可以看到block对应的是<10,11,12>,而在date block中是没有inum的,我写上为了方便理解,我们找到了<10,11,12>,那么我们就从date block中读取出数据,然后返回给cat,这样我们就能读取到a.txt文件内容了。
[root@localhost~]#分析U盘变小了的原因

  看懂了上面的图,现在就很容易理解U盘,分区变小的原因了。在inode中,dir的一条记录占用一个inode,file中一条记录占用了一个inode,而且file中的一条记录还记录了这个文件的拥有者,所属组和属性等信息。这一部分总占用的资源就是我们U盘,分区少的那一部分,所以我们分区创建好之后,会变小,就是这个原因。

[root@localhost~]#如何选择date block大小

 今天我闲的无聊用英文写了这个问题的解答,只过了四级,所以语法很多问题,不过搞IT嘛,能看懂就行,哈哈!

every date block has regular size:

  if regular size is small,the inode will occupation(占用) to much space,the rest for date block will decrease( 减少).

  if regular size is large,some small document can't occupation full of a date block,the bad things :much space will be waste.

so choose the right date block regular size is decide to you requirement.

 
  我想表达的大概意思就是,每一个文件系统我们都可以规定date block的默认大小。如果太小,那么inode就会占用太多的资源,那么留给date block就会变少,那么我们看到的分区就比现在还要小;如果太大,那么一些小文件可能占用不完一个block,而使用了一个block,那么很多的空间就会被浪费。所以选择一个合适的date block大小取决于你的需求。
[root@localhost~]#软链接,硬链接

 我们知道,在用ls -l查看文件权限的时候,第一位可能是 -,d,l,-代表的是普通文件,d代表目录,l代表链接文件。其实这样的属性还有很多个。今天来讲一下链接文件。
 软链接做个比喻,其实就像windows中的快捷方式。如何来创建链接呢?
 1.软链接:ln -s a.txt b.txt,b.txt是本来不存在的,现在b.txt就是a.txt的一个快捷方式。
 
 2.硬链接:ln a.txt b.txt,表示硬链接,a.txt和b.txt互相为对方的硬链接。
 这里说一下软硬链接的性质:
 1.不能跨文件系统创建硬链接,因为不同的文件系统可能有相同的inode。
 2.不能做目录的硬链接。
 3.硬链接,删除其中一个硬链接,另外一个可以读取,软链接删除源文件,不能读取了。
 4.两个硬链接都被删除,该inode会被重新分配。  
 5.软链接会占用磁盘空间,硬链接不会占用磁盘空间。
 硬链接其实就是指向同一文件且inum相同的两条inode,所以他们都会占用一条inode。
[root@localhost~]#数据恢复的原理

  我们知道,删除一个文件只是删除了这个文件的inode,而指向的date block却没有被删除,所以我们可以再次通过已知的inode值来找到date block,从而重新读取出里面的数据。但是我们常见的数据恢复软件都会友情提示,数据误删除之后,都不要再继续进行读写磁盘,因为可能重新写的数据会占用了你之前删除的inode,date block也会被占用,那么即时你找回了,要不是原来的数据了。

 总结:

[root@lcoalhost~]#来自爱家人爱老婆的IT男:
好好揣摩一下文件系统的结构,这对我们今后走运维这条路很有帮助的,希望大家都能够越走越远,越走越顺利! 博客园:爱家人爱老婆的IT男
QQ群:,我会上传资源,同时会有很多大神跟你们讨论学习分享
微信公众号:程序猿的野生香蕉【获取文章中出现的工具】

<实训|第十天>从底层解释一下U盘内存为什么变小的原因附数据恢复的基本原理的更多相关文章

  1. 零基础自学Python十天的时候,写的一款猜数字小游戏,附源码和软件下载链接!

    自学一门语言最重要的是要及时给自己反馈,那么经常写一些小程序培养语感很重要,写完可以总结一下程序中运用到了哪些零散的知识点. 本程序中运用到的知识点有: 1.输入输出函数 (input.print) ...

  2. Java企业实训 - 01 - Java前奏

    前言: 虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到. 一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目 ...

  3. UML基础与Rose建模实训教程

    目  录 第1章  初识UML. 1 1.1 初识UML用例图... 1 1.2 初识UML类图... 3 第2章  Rational Rose工具... 6 2.1 安装与配置Rational Ro ...

  4. 软件工程实训项目案例--Android移动应用开发

    实训过程 角色分工 1.项目经理:负责项目的组织实施,制定项目计划,并进行跟踪管理 2.开发人员:对项目经理及项目负责 3.需求分析员:负责系统的需求获取和分析,并协助设计人员进行系统设计 4.系统设 ...

  5. <实训|第三天>Linux登录界面的修改以及Richard Stallman、自由软件运动

    在写博客之前我想说两点: 承认一个错误,昨天写的实训第二天,我把redhat6.7写成了Linux6.7,感谢热心人士的指出! 昨天写的文章名字太长了,今天改善,内容感觉表述不全,希望各位谅解! 官方 ...

  6. Android实训案例(四)——关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程!

    Android实训案例(四)--关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程! 关于2048,我看到很多大神,比如医生,郭神,所以我也研究了一段时间,还好是研究 ...

  7. Java实训:实训一 ——长春职业技术学院 16级网络工程

    Java实训:实训一 本文会解释一些设计思路. 想看具体过程,请转:https://www.cnblogs.com/lxwlxw/p/10114187.html 笑维的码云项目命名不太对,所以我来:h ...

  8. 实训第六天(mybatis)

    今天实训第六天,我们学习了mybatis这个数据库框架,虽然说框架的环境搭建非常的繁琐,但是在了解原理和流程之后是非常的舒服的.因为有一个强大的工具被我掌握了,所以今天感觉非常的开心. 首先我们是在s ...

  9. <实训|第六天>偷偷让新手的Linux无限重启附linux主机名称不是随便乱改的!

    先说个事情:这几天我正在忙一个项目的设计,8月1号之前要弄出来,所以每天都要弄到很晚,可能更新就有点跟不上了,不过我如果有时间的话,我就更新,没时间的话,我会在8月1号之后统一更新出来,希望大家谅解! ...

随机推荐

  1. JavaScript Patterns 6.4 Prototypal Inheritance

    No classes involved; Objects inherit from other objects. Use an empty temporary constructor function ...

  2. ORACLE 查看RMAN的备份信息总结

    关于Oracle数据库的RMAN备份,除了邮件外,是否能通过其它方式检查RMAN备份的成功与失败呢?其实我们可以通过下面SQL脚本来检查某个时间段备份失败的记录: SELECT * FROM V$RM ...

  3. Android海康监控视频调用demo

    一. 开发环境 1. 操作系统:windows7(X64) 2. 开发工具:eclipse adt Build: v22.2.1-833290 JDK7 android SDK 3. 客户端设备版本: ...

  4. CentOS7网络配置

    *关于查看IP信息 window中是 ipconfig Linux一般都是 ifconfig 不过CentOS7中  这个命令发生了更改 :ip addr 设置网络 再新建虚拟机向导过程中,有一步[网 ...

  5. HTML5游戏开发引擎,初识CreateJS

    CreateJS为CreateJS库,可以说是一款为HTML5游戏开发的引擎.打造 HTML5 游戏,构建新游戏,提供构建最新 HTML5 的技术.你可以通过这个网站学习如何构建跨平台和跨终端游戏.这 ...

  6. PCI在linux系统中注册与注销示例

    1. pci_driver结构struct pci_driver {    struct list_head node;    const char *name;    const struct pc ...

  7. JAVA插入sql代码

    插入数据 import java.sql.*; /** * @version 2012-02-22 * @author */ public class InsertDemo { public stat ...

  8. jquery对标签属性操作

    jquery中添加属性和删除属性: $("#2args").attr("disabled",'disabled'); $("#2args") ...

  9. Openxml入门---Openxm读取Excel数据

    Openxml读取Excel数据: 有些问题,如果当Cell 里面是 日期和浮点型的话,对应的Cell.DataType==Null,对应的时间会转换为一个浮点型,对于这块可以通过DateTime.F ...

  10. 【HTML】嵌入图像

    img元素允许我们在HTML文档里嵌入图像. 要嵌入一张图像需要使用src和alt属性,代码如下: <img src="../img/example/img-map.jpg" ...