您现在的位置是:首页 > 文章详情

linux磁盘与文件系统

日期:2017-11-06点击:806

一、磁盘物理结构

 

1. 磁盘 :由一个个盘片构成 , 从盘片的结构上看 , 图中的一圈圈灰色同心圆为一条条磁道 , 从圆心向外画直线 , 可以将磁道划分为若干个弧段 , 每一个磁道上一个弧段被称为一个扇区 , 扇区是磁盘的最小组成单元 , 通常是512字节 。
 

2. 

 

2. 磁盘分区: 指定分割区域起始与结束磁柱 

3. 磁盘分区是告诉操作系统 , 磁盘在此分割区域内 。 例如A磁柱到B磁柱之间的区块 , 如此一来 , 操作系统灸能够知道他可以指定区块进行文件读写查询操作 。 

4. 格式化: 因为每种操作系统所设定的文件属性\权限 , 以及存放数据的格式不同 , 所以使用硬盘之前需要进行格式化 。

二、 文件系统

  1. Ext2\Ext3\Ext4的区别

    1. 这三个都是文件系统格式
    2. Linux kernel自2.6.28开始正式支持新的文件系统Ext4
    3. Ext4是Ext3的改进版 , 修改了Ext3中部分重要的数据结构 。
    4. Ext3相比于Ext3而言 , 只是增加了一个日志系统而已 。 Ext4可以提供更佳的性能和可靠性 ,还有更为丰富的功能 , 更大的文件系统和文件 。
    5. 较之Ext3所支持的最大16TB文件系统和最大2TB文件 , Ext4分别支持1EB(1048576TB 1EB = 1024PB 1PB = 1024TB)的文件系统和16TB的文件 。
    6. Ext3只支持32000个子目录 ,而Ext4支持无限数量的子目录 。
    7. Extents(区段)

      1. Ext3采用间接块映射 , 当操作大文件时 , 效率极其低下 , 比如一个100MB的文件 , 在Ext3中要建立25600个数据块(每个数据块为4kb)的映射表 。在Ext3中 , 每个物理块都要一个逻辑结构与之相对应。
      2. Ext4引入了Extents的概念 。 提高效率 。 每个Extents为一组连续的数据块 , 理想情况下 , 上述文件则只需要一个Extent来记录映射挂关系 。
    8. 多块分配

      1. 当写入数据到Ext3文件系统中时 , Ext3的数据块分配器每次只能分配一个4kb的块 , 写一个100MB的文件就要调用25600次数据块 , 而Ext4的多块分配器支持一次调用分配多个数据块 。
    9. 延迟分配

      1. Ext3的数据块分配策略是尽快分配 。 而Ext4的分配策略是尽可能的延迟分配 。 知道文件在catch中 写完才开始分配数据块写入磁盘 。
      2. 如此能优化整个文件的数据块分配 , 显著提升性能 。
    10. 快速fsck(文件系统检查)

      1. 老的fsck会很慢 , 因为他要检查所有的inode
      2. Ext4给每个组的inode表中过他们 , 而只是去检查那些在用的inode添加了 一份未使用的inode的列表 , 执行fsck就可以跳。
    11. 日志校验

      1. 日志是最常用的部分,也极易导致磁盘硬件故障 , 而从损坏的日志中 恢复数据会导致更多的数据损坏 。
      2. Ext4的日志校验功能可以很方便的判断日志数据是否损坏 , 将过去两阶段日志机制合并成一段 , 提高性能 。
      3. 两阶段日志提交:

        1. 文件系统将准备执行的事务的具体内容写入日志
        2. 文件系统进行操作
        3. 操作成功之后, 将事务的具体内容从日志中删除 。
    12. 无日志(Nojournaling)模式

      1. Ext4允许关闭日志 , 以便某些有特殊需求的用户可以借此进一步提升性能 。
    13. 在线碎片管理

      1. Ext4支持在线碎片整理 , 并提供e4defrag工具进行个别文件或整个文件系统的碎片整理 。
    14. inode相关特性

      1. Ext4支持更大的inode , 较之Ext3默认的inode大小128字节 , Ext4为了在inode中容纳更多的扩展特性(如纳秒时间戳或inode版本) , 默认inode大小为256字节
    15. 持久预分配

      1. P2P软件为了 保证下载文件有足够的空间存放 , 常常会预先创建一个与下载文件相同的空文件 , 以免未来的数小时或 数天之内磁盘空间不足导致下载失败。 Ext4在文件系统层面实现了持久预分配并提供相应的API , 比应用软件自己实现更有效率。
  2. swap介绍

    1. 使用磁盘存储 , 内存不够而”溢出”的内容 。
    2. 当系统的物理内存不够用的时候 , 就需要将物理内存中的一部分空间释放出来 , 以供当前运行的程序使用。
    3. 最容易成为被释放的对象 : 一些很长时间没有操作的程序 。 一些被释放的空间被临时保存在Swap空间中 。 等到那些被换出的程序要继续运行时 , 再从Swap中恢复保存的数据到内存中 。
    4. 一般来说可以按照如下规则设置Swap大小:

      1. 4G的物理内存 , SWAP设置为内存的2倍 。
      2. 4G-8G的物理内存 , SWAP设置为内存相同大小
      3. 8G-64G的物理内存 , SWAP设置为8G
      4. 64G-256G的物理内存 , SWAP设置为16G
    5. 系统什么时候会使用swap?

      1. 实际上并不是等所有的物理内存全部消耗完之后 , 才去使用swap空间

         [root@localhost ~]# cat /proc/sys/vm/swappiness 60 默认值是60 。 swappiness = 0时表示最大限度的使用物理内存 , 然后才是swap空间 , swappiness = 100 时 表示积极使用swap空间 , 并且把内存上的数据及时搬运到swap空间 
      2. 修改swap参数:

        1. 临时性修改

           [root@localhost ~]#sysctl vm.swappiness = 10 vm.swappiness = 10 [root@localhost ~]# cat /proc/sys/vm/swappiness 10 这里已经做了修改 , 但是重启系统之后又会变成60 。 
        2. 永久修改

           在/etc/sysctl.conf文件中添加如下参数 : vm.swappiness = 10 操作: [root@localhost ~]# vim /etc/sysctl.conf 按i 写入vm.swappiness = 10 按esc 输入wq(保存并退出)回车 
      3. swap开启与关闭

         开启 swapon -a 关闭 swapoff -a 

三、文件系统的操作

  1. 挂载点

    1. 每个文件系统都有独立的 inode/block/superblock等信息 , 这个文件系统要能够链接到目录树才能被我们使用 。 将文件系统和目录树结合的动作称为挂载 。
    2. 挂载点一定是目录 , 此目录为文件系统的入口 。
    3. mount命令 : 将设备挂载到某个目录
    4. mount常用参数

      1. -t : 指定设备的文件系统类型

        1. Ext4 linux目前常用的文件系统
        2. nfs 网络文件系统
        3. iso9660 CD-ROM光盘标准文件系统
        4. auto 自动检测文件系统
      2. -o 指定挂载文件系统时的选项

        1. ro 以只读的方式挂载
        2. rw 以读写方式挂载
    5. umount :卸载目录或是挂载点
    6. 实例:

       [outman02@bogon tj]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 8.6G 2.5G 5.7G 31% / tmpfs 491M 228K 491M 1% /dev/shm /dev/sda1 291M 34M 242M 13% /boot [outman02@bogon tj]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 1024M 0 rom sda 8:0 0 10G 0 disk ├─sda1 8:1 0 300M 0 part /boot ├─sda2 8:2 0 8.7G 0 part / └─sda3 8:3 0 1G 0 part [SWAP] [outman02@bogon tj]$ su Password: [root@bogon tj]# mount /dev/sda1 /tj/udisk mount: mount point /tj/udisk does not exist [root@bogon tj]# mount /dev/sda1 outman02/tj/udisk mount: mount point outman02/tj/udisk does not exist [root@bogon tj]# ll total 12 drwxr-xr-x. 2 root root 4096 Nov 2 06:02 a drwxr-xr-x. 2 root root 4096 Nov 2 06:02 b drwxr-xr-x. 2 root root 4096 Nov 4 23:53 udisk [root@bogon tj]# mount /dev/sda1 /udisk mount: mount point /udisk does not exist [root@bogon tj]# mount /dev/sda1 udisk [root@bogon tj]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 1024M 0 rom sda 8:0 0 10G 0 disk ├─sda1 8:1 0 300M 0 part /boot ├─sda2 8:2 0 8.7G 0 part / └─sda3 8:3 0 1G 0 part [SWAP] [root@bogon tj]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 8.6G 2.5G 5.7G 31% / tmpfs 491M 228K 491M 1% /dev/shm /dev/sda1 291M 34M 242M 13% /boot /dev/sda1 291M 34M 242M 13% /home/outman02/tj/udisk **如果挂载后查看U盘内容出现乱码** [root@bogon tj]# locale LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL= [root@bogon tj]# man mount [root@bogon tj]# mount -o iocharset=utf-8 /dev/sda1 /home/outman02/tj/udisk 
    7. /etc/fstab文件:开机一道的时候自动挂载到Linux的文件系统 。
    8. df :列出文件系统整体磁盘使用情况

      1. -a : 列出所有文件系统
      2. -k : 以Bytes对的容量显示文件系统
      3. -m : 以MBytes的容量显示文件系统
      4. -h : GBytes、MBytes、KByte等格式自行显示
      5. -i : 以inode数量显示

         [root@bogon tj]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 8985528 2600612 5928468 31% / tmpfs 502204 228 501976 1% /dev/shm /dev/sda1 297485 34642 247483 13% /boot /dev/sda1 297485 34642 247483 13% /home/outman02/tj/udisk [root@bogon tj]# df -a Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 8985528 2600612 5928468 31% / proc 0 0 0 - /proc sysfs 0 0 0 - /sys devpts 0 0 0 - /dev/pts tmpfs 502204 228 501976 1% /dev/shm /dev/sda1 297485 34642 247483 13% /boot none 0 0 0 - /proc/sys/fs/binfmt_misc vmware-vmblock 0 0 0 - /var/run/vmblock-fuse /dev/sda1 297485 34642 247483 13% /home/outman02/tj/udisk [root@bogon tj]# df -k Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 8985528 2600628 5928452 31% / tmpfs 502204 228 501976 1% /dev/shm /dev/sda1 297485 34642 247483 13% /boot /dev/sda1 297485 34642 247483 13% /home/outman02/tj/udisk [root@bogon tj]# df -m Filesystem 1M-blocks Used Available Use% Mounted on /dev/sda2 8775 2540 5790 31% / tmpfs 491 1 491 1% /dev/shm /dev/sda1 291 34 242 13% /boot /dev/sda1 291 34 242 13% /home/outman02/tj/udisk [root@bogon tj]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 8.6G 2.5G 5.7G 31% / tmpfs 491M 228K 491M 1% /dev/shm /dev/sda1 291M 34M 242M 13% /boot /dev/sda1 291M 34M 242M 13% /home/outman02/tj/udisk 
    9. du : 文件系统的磁盘使用量或是目录使用量

      1. -a : 列出所有文件的目录容量
      2. -h : 以人们易读的格式(G/M)显示
      3. -s : 列出总量 , 而不列出每个个别目录占用容量
      4. -k : 以Bytes列出容量显示
      5. -m : 以MBytes列出容量显示

         [root@bogon tj]# du 251 ./udisk/efi/EFI/redhat 24439 . [root@bogon tj]# du -a 3 ./udisk/grub/splash.xpm.gz 16 ./udisk/grub/reiserfs_stage1_5 2 ./udisk/grub/device.map 1 ./udisk/grub/menu.lst 276 ./udisk/grub 24427 ./udisk 4 ./a 4 ./b 24439 . [root@bogon tj]# du -h 13K ./udisk/lost+found 276K ./udisk/grub 24M ./udisk 24M . [root@bogon tj]# du -s 24439 . [root@bogon tj]# du -k 24427 ./udisk 4 ./a 4 ./b 24439 . [root@bogon tj]# du -m 1 ./udisk/efi/EFI/redhat 1 ./b 24 . 
    10. dumpe2fs : 观察文件系统

      1. dumpe2fs [options]

        1. -h : 仅列出superblock的数据 , 不会列出其他区段的内容

           [root@localhost ~]#dummpe2fs -h /dev/sda1
原文链接:https://www.centoschina.cn/course/intermediate/9159.html
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章