Linux(六) 磁盘与文件系统

磁盘与文件系统

一、磁盘物理结构


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
          
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值