[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. MySQL基础学习(二) 常用SQL命令

    一. 1. select version();  查看数据库版本 2. select user(); 查看当前用户 3. select now(); 查看当前时间 4. show databases; ...

  2. HQL查询语句

    查询语言 Hibernate 查询语言(HQL)是一种面向对象的查询语言,类似于 SQL,但不是去对表和列进行操作,而是面向对象和它们的属性. HQL 查询被 Hibernate 翻译为传统的 SQL ...

  3. Makefile关键字

    @ makefile会把将要执行的命令行在命令执行前输出到屏幕上,使用@可以避免显示出命令本身 若@ echo 正在编译-则$make显示正在编译- 若echo 正在编译-则$make显示: echo ...

  4. 树莓派mjpg-stream摄像头监控

    Q:463431476 第一步: 1.安装依赖 sudo apt-get install libv4l-dev libjpeg8-dev imagemagick   第二步: 下载SVN   sudo ...

  5. ajax小结

    1. http是一种无状态协议 2. http请求:四部分组成 ① http 请求的方法或动作,如:GET / POST ② 正在请求的URL,总得知道请求的地址是什么 ③ 请求头,包含一些客户端环境 ...

  6. 详细说说 Google Test Certified 的各级——Level 2,3

    转载请联系作者,谢谢!   No releases with red tests基于Level1搭建的持续集成,持续发布选用的CL(changelist)就可以取自CI系统最后跑通的CL,因为持续集成 ...

  7. 第65课 C++中的异常处理(下)

    1. C++中的异常处理 (1)catch语句块可以抛出异常 ①catch中获捕的异常可以被重新抛出 ②抛出的异常需要外层的try-catch块来捕获 ③catch(…)块中抛异常的方法是throw; ...

  8. TC(Total Commander)文件管理神器

    TC文件管理神器 Total Commander是一个会显著提高文件操作效率的工具,而文件操作是应用计算机最基本的功夫,也是伴随一生的操作.因此花一点时间学习,而会受益一世. Total Comman ...

  9. using关键字背后的故事!

    using关键字的作用: 1:可以引入命名空间2:可以释放资源 *****不能使用using语句完全替换掉(try-catch-finally)语句(无法进行异常处理) 在出了using语句的{}后, ...

  10. JProfiler学习笔记

    JProfiler学习笔记   一.安装JProfiler        从http://www.ej-technologies.com/下载5.1.2并申请试用序列号   二.主要功能简介 1.内存 ...