中国铁路监理建设协会网站购物电商型网站怎么做

当前位置: 首页 > news >正文

中国铁路监理建设协会网站,购物电商型网站怎么做,网站建设需要经过哪几个步骤,我要自学网网站目录 1.文件的读取 1.1.目录 1.2.文件 1.3.目录树读取 1.4.文件系统大小与磁盘读取性能 2.增添文件 2.1.数据的不一致#xff08;Inconsistent#xff09;状态 2.2.日志式文件系统#xff08;Journaling filesystem#xff09; 3.Linux文件系统的运行 4、文件的删…目录 1.文件的读取 1.1.目录 1.2.文件 1.3.目录树读取 1.4.文件系统大小与磁盘读取性能 2.增添文件 2.1.数据的不一致Inconsistent状态 2.2.日志式文件系统Journaling filesystem 3.Linux文件系统的运行 4、文件的删除 4.1. 删除文件 4.2.为什么拷贝文件的时候很慢而删除文件的时候很快 4.3.、文件误删后的解决方案 5、大文件存储 1.文件的读取 我们知道在Linux系统下每个文件不管是一般文件还是目录文件都会占用一个inode且可依据文件内容的大小来分配多个区块给该文件使用。 目录的内容在记录文件名一般文件才是实际记录数据内容的地方。 我们现在已经了解了Linux的文件系统那么Linux是如何对文件进行读取的呢 1.1.目录 当我们在Linux下的文件系统建立一个目录时文件系统会分配一个inode与至少一块区块给该目录。 其中inode记录该目录的相关权限与属性并可记录分配到的那块区块号码而区块则是记录在这个目录下的文件名与该文件名占用的inode号码数据也就是说目录所使用的区块记录如下的信息 如果想要实际观察root 根目录内的文件所占用的inode号码时可以使用Is-i这个选项来处理 由于每个人所使用的计算机并不相同系统安装时选择的项目与磁盘分区都不一样因此你的环境不可能与我的inode号码一模一样上表的左边所列出的inode仅是我的系统所显示的结果而已。而由这个目录的区块结果我们现在就能够知道当你使用【|| /】时出现的目录几乎都是1024的倍数为什么因为每个区块的数量都是1K、2K、4K看一下我的环境: 由于我的根目录使用的区块大小为4K因此每个目录几乎都是4K的倍数其中由于/usr/sbin的内容比较复杂因此占用了3个区块。 至于奇怪的/proc我们在讲过该目录不占磁盘容量所以当然使用的区块就是0。 由上面的结果我们知道目录并不只会占用一个区块而已也就是说在目录下面的文件数如果太多而导致一个区块无法记录得下所有的文件名与inode对照表时Linux会多给该目录一个区块来继续记录相关的数据。 1.2.文件 当我们在Linux下的ext2建立一个一般文件时ex2会分配一个inode与相对于该文件大小的区块数量给该文件。 例如假设我的一个区块为4KB而我要建立一个100KB的文件那么Linux将分配一个inode与25个区块来存储该文件。但同时请注意由于inode仅有12个直接指向因此还要需要一个区块来记录区块号码。 1.3.目录树读取 好了经过上面的说明你也应该要很清楚地知道inode本身并不记录文件名文件名的记录是在目录的区块当中。 那么因为文件名是记录在目录的区块当中因此当我们要读取某个文件时就务必会经过目录的inode与区块然后才能够找到那个待读取文件的inode号码最终才会读取到该文件的区块中的数据。 由于目录树是由根目录开始读起因此系统通过挂载的信息可以找到挂载点的inode号码此时就能够得到根目录的inode内容并依据该inode 读取根目录的区块内的文件名数据再一层一层的往下读到正确的文件名。 举例来说如果我想要读取/etc/passwd这个文件时系统是如何读取的呢 在我系统上面与/etc/passwd有关的目录与文件数据如上表所示该文件的读取流程为假 设读取者身份为dmtsai 这个一般身份用户 1. /的inode 通过挂载点的信息找到inode号码为2的根目录inode且 inode 规范的权限让我们可以读取 该区块的内容有r与x 2./ 的区块 经过上个步骤取得区块的号码并找到该内容有etc/目录的inode 号码1310721); 3. etc/ 的inode: 读取1310721号inode 得知zs_108具有r与x的权限因此可以读取etc/的区块内容 4. etc/的区块 经过上个步骤取得区块号码并找到该内容有passwd 文件的inode 号码1311648); 5. passwd 的 inode: 读取1311648号inode 得知zs_108具有r的权限因此可以读取passwd的区块内容 6. passwd的区块 最后将该区块内容的数据读出来 1.4.文件系统大小与磁盘读取性能 另外关于文件系统的使用效率当你的一个文件系统规划得很大时例如100GB这么大时由于磁盘上面的数据总是来来去去的所以整个文件系统上面的文件通常无法连续写在一起区块号码不会连续的意思而是填入式地将数据写入没有被使用的区块当中。 如果文件写入的区块真的很分散此时就会有所谓的文件数据离散的问题发生了。 如前所述虽然我们的ext2在inode处已经将该文件所记录的区块号码都记上了所以数据可以一次性读取但是如果文件真的太过离散确实还是会发生读取效率下降的问题因为磁头还是得要在整个文件系统中来来去去地频繁读取。 果真如此那么可以将整个文件系统内的数据全部复制出来将该文件系统重新格式化再将数据给它复制回去即可解决这个问题。 此外如果文件系统真的太大那么当一个文件分别记录在这个文件系统的最前面与最后面的区块号码中此时会造成磁盘的机械手臂移动幅度过大也会造成数据读取性能的下降。 而且磁头在查找整个文件系统时也会花费比较多的时间去查找。 因此磁盘分区的规划并不是越大越好而是要针对您的主机用途来进行规划才行。 2.增添文件 上一小节谈到的仅是读取而已那么如果是新建一个文件或目录时我们的文件系统是如何处理的呢 这个时候就得要区块对照表及inode 对照表的帮忙了。 假设我们想要新增一个文件此时文件系统的操作是 1.先确定用户对于欲新增文件的目录是否具有w与x的权限若有的话才能新增2.根据inode 对照表找到没有使用的inode号码并将新文件的权限/属性写入3.根据区块对照表找到没有使用中的区块号码并将实际的数据写入区块中且更新inode的区块指向数据4.将刚刚写入的inode与区块数据同步更新inode对照表与区块对照表并更新超级区块的内容。 一般来说 我们将inode 对照表与数据区块称为数据存放区域至于其他例如超级区块、区块对照表与inode 对照表等区段就被称为元数据metadata 因为超级区块、inode对照表及区块对照表的数据是经常变动的每次新增、删除、编辑时都可能会影响到这三个部分的数据因此才被称为元数据。 2.1.数据的不一致Inconsistent状态 在一般正常的情况下上述的新增操作当然可以顺利的完成。 但是如果有个万一怎么办 例如你的文件在写入文件系统时因为某些原因导致系统中断例如突然的停电、系统内核发生错误等的怪事发生时)所以写入的数据仅有inode对照表及数据区块而已最后一个同步更新元数据的步骤并没有完成此时就会发生元数据的内容与实际数据存放区产生不一致Inconsistent的情况。 既然有不一致当然就得要解决。 在早期的ext2文件系统中如果发生这个问题那么系统在重新启动的时候就会借由超级区块当中记录的有效位是否有挂载与文件系统状态正确卸载与否等状态来判断是否强制进行数据一致性的检查若有需要检查时则以e2fsck这个程序来进行。 不过这样的检查真的是很费时因为要针对元数据区域与实际数据存放区来进行比对呵呵得要查找整个文件系统如果你的文件系统有100GB以上而且里面的文件数量又多时哇系统真忙碌而且在对提供网络服务的服务器主机上面这样的检查真的会造成主机恢复时间的拉长真是麻烦这也就造成后来所谓日志式文件系统的兴起。 2.2.日志式文件系统Journaling filesystem 为了避免上述提到的文件系统不一致的情况发生我们的前辈们想到一个方式如果在我们的文件系统当中规划出一个区块该区块专门记录写入或修改文件时的步骤那不就可以简化一致性检查的步骤了 也就是说 1.预备当系统要写入一个文件时会先在日志记录区块中记录某个文件准备要写入的信息2.实际写入开始写入文件的权限与数据开始更新metadata的数据3.结束完成数据与metadata的更新后在日志记录区块当中完成该文件的记录 在这样的程序当中万一数据的记录过程当中发生了问题那么我们的系统只要去检查日志记录区块就可以知道哪个文件发生了问题针对该问题来做一致性的检查即可而不必针对整个文件系统进行检查这样就可以达到快速修复文件系统的目的这就是日志式文件最基础的功能。 那么我们的ext2可实现这样的功能吗 当然可以使用ext3与ext4即可。ext3与ext4是ex的升级版本并且可向下兼容ext2版本。所以目前我们才建议大家可以直接使用ext4这个文件系统如果你还记得dumpe2fs 输出的信息可以发现超级区块里面含有下面这样的信息 看到了吧通过inode 8号记录日志区块的区块指向而且该日志区块具有32MB的容量来记录 日志信息。这样对于所谓的日志式文件系统有没有一点概念呢 3.Linux文件系统的运行 我们现在知道了目录树与文件系统的关系但我们也知道所有的数据要加载到内存后CPU才能够进行处理。 想一想如果你常常编辑一个好大的文件在编辑的过程中又频繁地要系统来写入到磁盘中由于磁盘写入的速度要比内存慢很多因此你会常常耗在等待磁盘的读写上真没效率。 为了解决这个效率的问题Linux使用一个称为异步处理asynchronously的方式。所谓的异步处理是这样的 当系统加载一个文件到内存后如果该文件没有被修改过则在内存区段的文件数据会被设置为【干净clean】。但如果内存中的文件数据被更改过了例如你用nano去编辑过这个文件此时该内存中的数据会被设置为【脏的Dirty】此时所有的操作都还在内存中执行并没有写入到磁盘中。系统会不定时的将内存中设置为【Dirty】的数据写回磁盘以保持磁盘与内存数据的一致性。你也可以利用sync命令来手动强制写入磁盘。 我们知道内存的速度要比磁盘快得多因此如果能够将常用的文件放置到内存当中这不就会提高系统性能了吗 没错是有这样的想法。 因此我们Linux系统上面的文件系统与内存有非常大的关系 系统会将常用的文件数据放置到内存的缓冲区以加速文件系统的读写操作因此 Linux的物理内存最后都会被用光这是正常的情况可加速系统性能你可以手动使用sync来强制内存中设置为Dirty的文件回写到磁盘中若正常关机时关机命令会主动调用sync来将内存的数据回写入磁盘内但若不正常关机如断电、宕机或其他不明原因由于数据尚未回写到磁盘内因此重新启动后可能会花很多时间在进行磁盘校验甚至可能导致文件系统的损坏非磁盘损坏 4、文件的删除 文件创建后如何删除 删除并不是真删除而是将 inode 对照表 和 Block对照表 中位图信息进行修改即可只要访问不到就是删除 根据文件名找到 inode 编号再根据 inode 属性中的映射关系设置 Block 对照表对应的比特位设置为 0 删内容最后根据 inode 编号设置 inode对照表中对应的比特位为 0 删属性 将位图信息置为 0 后创建新文件时系统可以直接使用 至于文件的查找与修改通过 inode 修改其内部属性即可 注意 inode 和 Data blcok 可能存在失衡的情况 一直创建空文件导致 inode 满载而 Data block 空余很多  不断往同一个文件中写入数据导致 Data block 被占用后续创建文件时inode 无法再分配到 Data block 4.1. 删除文件 删除文件的步骤 首先根据文件名找到inode编号再将该文件对应的inode在inode位图当中置为无效置0最后将该文件申请的数据块在块位图当中置为无效置0 此删除操作并不会真正将文件对应的信息删除而只是将其inode号和数据块号置为了无效起到了访问不到就等于删除的效果 当我们删除文件后短时间内是可以恢复的 为什么说是短时间内呢 因为该文件对应的inode号和数据块号已经被置为了无效因此后续创建其他文件或是对其他文件进行写入操作申请inode号和数据块号时可能会将该置为无效了的inode号和数据块号分配出去此时删除文件的数据就会被覆盖也就无法恢复文件了。 4.2.为什么拷贝文件的时候很慢而删除文件的时候很快 因为拷贝文件需要先创建文件然后再对该文件进行写入操作该过程需要先申请inode号并填入文件的属性信息之后还需要再申请数据块号最后才能进行文件内容的数据拷贝而删除文件只需将对应文件的inode号和数据块号置为无效即可无需真正的删除文件因此拷贝文件是很慢的而删除文件是很快的。 4.3.、文件误删后的解决方案 磁盘中的数据被删除后还可以再恢复吗 答案是可以的但不能完全恢复并且越早断电、送修越好 前面说过删除并不是真删除访问不到就行了所以只要在删除后根据 inode 找到 Data block其中的内容没有被覆盖数据就可以找回来 应急方案 不要轻举妄动避免 Data block 被覆盖通过 inode 将 inode 位图 中的位图置 1使文件复活再根据属性进行数据恢复如果自己不知道 inode那就尽早断电送给厂家恢复专业 如何避免误删文件 学习 Windows 中的回收站删除不是真删除而是先将文件移入回收站目录中留给用户反悔的时间 5、大文件存储 单个数据块大小有限(4 kb)如何做到一个数据块存储大量数据 答案是 套娃Data block 中存储其他 Data block 信息此时称为多级索引可以做到一个数据块中存储大量数据