从0开始-Linux学习笔记(七)

刘小泽写于18.6.24-7.1 一个星期入门linux
我相信这是比之前写的 “测序的世界” 更浩大的工程,但值得写出来!

磁盘管理:

学好磁盘管理,会对以后自己处理服务器硬盘问题大有裨益

硬盘:

我们每天打交道最多的可能就是硬盘了,只要你开机,硬盘就开始通电工作,可能那会还没来得及开显示器,硬盘就已经在BIOS自检后启动了操作系统,这一切似乎在很短的时间内就完成了。但是它靠的却是机箱里厚重质感的大块头——硬盘

  • 硬盘长什么样?
    喜欢DIY的朋友应该都了解过,但是大部分用户应该没有见过机箱内的硬盘,或者不清楚其内部构造
    先看几张图养养眼~
从0开始-Linux学习笔记(七)_第1张图片
6.png
  • 硬盘物理结构相关概念:

    • 数据如何存储的: 磁盘天生并不会记录什么照片、文档文字等,它知道的只有0和1,硬盘有很多磁盘叠在一起,但相互之间又有间隔,通过改变磁盘的磁化方向来存数0和1,这样记录数据

    • 磁头(head)数:每个盘片有上下两面,各对应1个磁头,实现数据的存取

    • 磁道(track):当磁盘旋转时,磁头保持在一个位置上,每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。将最外侧道的编号为0,向内+1
      接下来把磁道想象成跑道,会容易理解的多

    • 柱面(cylinder):不同盘片的相同编号的磁道构成的圆柱面就被称之为柱面【柱面数=一个盘面的磁道数】
      【简单说,磁盘就相当于立体的操场,从上到下有很多0跑道,1跑道等
      柱面就是将各个层的同一编号跑道们汇集在一起的称呼

    • 扇区(sector):每个磁道都别切分成很多扇形区域,每个磁道的扇区数量相同,每个扇区大小为512字节
      比如:每个跑道有400米,我们从中可以切分成许多的5.12米,这就是扇区】

    • 平均寻道时间:就是跑完一圈跑道用的时间】
      硬盘在接收到系统指令后【起跑口令】,磁头从开始移动到数据所在的磁道所花费时间的平均值。
      它在一定程度上体现了硬盘读取数据的能力【相当于运动员的身体素质】,是影响硬盘内部数据传输率的重要参数,单位为毫秒(ms)。
      【一般PC为7200RPM; 笔记本5400RPM】
      外面柱面速度比内部的快不难理解:外侧跑道的运动员和内侧跑道的的运动员两个人同时到达终点,当然外侧跑道跑得更快】,所以将一些频繁访问的内容放在靠近外部的柱面,比如C盘。

    • 硬盘容量
      我们平时所说的几百G甚至上T的硬盘,是这么计算得来的
      硬盘的容量=柱面数×磁头数×扇区数×512(字节数)
      1T = 1024G = 10242 M = 10243K = 10244B(字节)

  • 硬盘的内部逻辑结构:

    • MBR(Main Boot Record)

      这是硬盘最核心的代码,没有了它,硬盘中的数据都会丢失

      • 中文名“主引导记录”,它是位于磁盘最前边的一段引导代码,它是生产厂商出厂时对磁初步格式化加入的【Born with loader code】

      • 职责:负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位【总指挥的角色】

      • 组成:三个部分组成(共占用512个字节):

        • 446bytes: BootLoader, 引导程序

        • 64bytes:
          每16bytes标识一个分区,所以最多只有四个主分区

          主分区+扩展分区<=4
          扩展分区最多只有一个

          选择只有两个:三主一扩展或四个主分区,否则剩余未分区的空间将无法使用

        • 2bytes: 魔数Magic Number,标记MBR是否有效

      • 如何启动的操作系统:【从0到1的过程】

        1. 开机CPU加载BIOS自检,完成后,根据BIOS中设定的启动次序,依次查找启动设备的MBR,没有MBR就找下一个设备,有MBR但坏了则系统报错,无法启动;
        2. 先将BootLoader加载到内存中,BIOS退出,BootLoader程序首先读取分区表(就是上面介绍的64bytes的各个分区)根据配置,加载对应分区上操作系统的内核
          【没有分区表则无法找到操作系统】;
        3. BootLoader会将内核读进内存,内存读入并解压缩BootLoader将控制权交给内核,内核开始启动自身,根据文件配置找到文件系统在什么地方,找到所需要运行的程序的位置,最终完成启动操作系统。
    • 如何实现硬盘快速读取?

      想象一个浩大的图书馆,你想找一本书,一般有两种方法:
      1.从进门开始一本一本找,想象也知道,可以实现但是太耗时
      2.使用索引目录,比如我想找的书是L开头的,就去L区

      硬盘也是如此,创建完分区后,就是利用文件系统快速搜索文件

      文件系统是一个管理软件,它存储在磁盘某个位置上,不在分区上,但它指向的数据在分区上。
      它能够把一个分区划分成两片,元数据存储区+数据存储

      从0开始-Linux学习笔记(七)_第2张图片
      7.png

      如果要存储文件怎么办? 核心就是找空闲存储块
      如何删除文件呢?

      1. 删除文件对应的条目

      2. 把目录中文件对应的inode在块位图中标记为空
        【可以就重新利用这个空块位了,只需要再次覆盖】
        【重新建新文件,只是将原来的数据块内容覆盖】

        对应的磁盘块虽然标记为空,可以继续使用,但里面的数据没动数据恢复工具就是利用这个原理恢复的

        所谓的“文件粉碎机、强力删除”其实就是利用一大堆的随机数据,把磁盘覆盖掉了,比如用一大堆0把原来文件占据的数据块全填满【可不是简单的标记数据块为0哦】

    • 文件复制与剪切:

      你是否发现了在一个盘内复制文件比剪切要慢?

      原因就是:
      复制是在新分区上建立一个新文件,在老分区上把文件复制过去,然后把老分区的删掉:
      剪切:就是把文件的目录调整了一下,inode没换,数据没换
      【这仅仅对于同一个分区内的文件来讲,换一个分区和复制速度差不多】

    • 硬连接和软链接:

      • 硬链接:

        1. 直接指向同一个inode的不同路径,彼此之间就叫硬链接

        【删除其中一个不影响访问另一个】

        1. 创建: ln 原路径SRC 目标路径DEST
        2. 只能对文件创建,不能应用于目录
        3. 不能跨文件系统
        4. 创建硬链接会增加文件被链接的次数
      • 软链接:

        1. 一个路径指向的inode,存储的是另一个路径
        2. 创建:ln -s SRC DEST
        3. 如果删除了SRC,链接文件也不能访问
        4. 可应用于目录,可以跨文件系统
        5. 不会增加被链接文件的链接次数
        6. 软链接文件大小为指定的路径所包含的字符个数

文件系统管理:

  • du :显示一个文件或目录占据系统整体空间大小

    • -s :(summarize)显示整个目录大小
    • -h:human-readable,以K、M、G显示
  • df :显示磁盘分区上的可使用的磁盘空间

    • -h:同上
    • -P:不换行显示
    • -i:显示inode使用情况
  • 设备文件

    • b:按块为单位,随机访问的设备;如:硬盘
    • c:按字符为单位,线性设备 如:键盘
    • 创建设备文件:mknod
  • 硬盘设备的设备文件名
    IDE、ATA:以hd开头
    SATA(Serial ATA):sd开头
    SCSI:sd开头
    USB:sd开头

    同一类型下的不同设备用a,b,c区别
    分区:1-4表示主分区,5以后的数字代表逻辑分区

  • 查看当前系统识别了几块硬盘
    fdisk -l 后接具体硬盘名,可以查看特定硬盘信息

    输入fdisk 会出来交互式界面--Ctrl和删除键连用可以删除刚输入的参数
    p:显示当前硬件的分区,包括没保存的改动
    n:创建新分区
      e: 扩展分区(extended)
      p: 主分区(primary)
    d:删除一个分区
    w:保存退出
    q:不保存退出
    t:修改分区类型  L: 跟在t后使用,显示所支持的所有类型
    # 如改为swap需要,L命令,输入Linux swap / Solaris 的编码(82)
    

    用这种方法创建完新分区后,此时内核仍未识别,
    cat /proc/partitions 查看分区列表,
    重读添加新建的分区,用partprobe /dev/sda 命令;之后才能进行高级格式化

  • Linux 下的VFS
    VFS是虚拟文件系统(Virtual Filesystem Switch),也存在内核空间中

    虚拟,是因为它所有的数据结构都是在运行以后才建立,并在卸载时删除,而在磁盘上并没有存储这些数据结构
    因此,只有与实际的文件系统,如Ext2、Minix、MSDOS、VFAT等相结合,才能开始工作

  • 创建文件系统 mkfs: make file system

    1. cat /proc/filesystems 查看当前内核所支持的文件系统类型
      例如:ext2、ext3、vfat
    2. mkfs -t 文件类型 /dev/新建的分区
      【⚠️不要对已有数据的分区创建文件系统,因为此操作等于快速格式化】
    • mke2fs 专门挂载EXT系列文件

      -j:创建ext3类型文件系统;
      -b BLOCK_SIZE:指定块大小,默认为4096,可用取值为1024、2048或4096; # 经常存储的小文件适合用小的,大文件用大的
      -L LABEL:指定分区卷标,有了卷标,下次重新开机多个挂载的硬件设备次序不会乱,且可用卷标来引用该分区;
      -m <数字>:指定预留给超级用户的预留百分比,默认为5%;
      -N:指定inode个数;
      
    • blkid 查询设备上所采用文件系统类型、UUID等

    • e2label 查看或定义卷标
      e2label 设备文件 卷标:设定卷标

    • tune2fs 无损调整文件系统的相关属性

      -j:不损害原有数据,将ext2升级为ext3;# 块大小属性不能更改
      -L LABEL:设定或修改卷标;
      -o:设定默认挂载选项;acl
      -m <数字>:调整预留给超级用户的预留百分比;
      -C <数字>:每挂载n天后进行自检,0或-1表示关闭此功能。
      
    • fsck 检查并修复LINUX文件系统
      -t FSTYPE:指定文件系统类型
      -a 自动修复

    • e2fsck 专门检查并修复EXT2、EXT3文件系统
      -p:自动修复;-f:强制修复

  • 挂载与卸载

挂载:将新的文件系统关联至当前根文件系统
卸载:解除某文件系统与当前根文件系统的关系

格式化硬盘后,使用mount

mount 设备 挂载点
    设备:
        设备文件:/dev/sda5
        卷标:LABEL=""
        UUID:UUID=""
挂载点:即目录
        要求:
        1.此目录没有被其他进程使用;
        2.目录事先存在;
        3.目录中的原有文件将会暂时隐藏;

# 挂载完成后,要通过挂载点访问对应系统上的文件
 mount -a 挂载所有/etc/fstab中的设备

卸载用unmount

umount 设备
umount 挂载点  

注意:挂载的设备没有进程使用;
  • 物理内存和交换空间使用情况

    swap交换空间
    由于进程某段时间内过多,导致系统的物理内存不够用的时候,如果没有多余进程存放位置,主机有可能会宕机。因此~物理内存会寻找一些很长时间没有什么操作的程序, 将他们的内存使用空间移动到硬盘中的一块位置上。这块为了内存应急的空间就是swap。
    【当那些被释放的出来的程序要运行时,再从硬盘Swap分区中恢复保存的数据到内存中】

    free 来查看 -h:human-readable

    从0开始-Linux学习笔记(七)_第3张图片
    8.png

  • 创建swap

    1. fdisk /dev/sda创建新分区,格式化的时候调整分区类型为82(Linux swap)【不调整,默认使用83Linux】
      partprobe /dev/sda 重读分区
    2. mkswap /dev/sda8 -L LABEL 进行格式化,指定卷标LABEL
    3. swapon /dev/sda8 启动交换分区 【关闭用swapoff】
  • dd 比cp更强大的复制命令

# cp是以文件为单位进行复制的;
# dd直接复制的文件代码,因此可以复制文件的一部分
if=数据来源 【input file】
of=数据存储目标 【output file】
bs=1 一次复制多少字节 【指定单位:bs=1M】
count=2 一共复制几次

dd复制备份MBR:

# 复制硬盘最开始的512的字节,那也就是核心程序MBR
dd if=/dev/sda of=/mnt/usb/mbr.backup bs=512 count=1
# 恢复
dd if=/mnt/usb/mbr.backup of=/dev/sda bs=512 count=1
  • 文件系统配置文件

    文件系统的配置文件/etc/fstab:系统在初始时,会自动挂载此文件中定义的每个文件系统,文件内容从左到右为:

    要挂载的设备 挂载点 文件系统类型 挂载选项 转储频率 文件系统检测次序
    /dev/sda5 /mnt/test ext3 defaults 0 0

    #转储频率<数字>(每多少天做一次完全备份,0表示不备份)
    #文件系统检测次序(只有根可以为1,0表示不检查)

  • fuser 验证进程正在使用的文件

    -v:查看某文件上正在运行的进程
    fuser -km MOUNT_POINT:终止正在访问此挂载点的所有进程
    

欢迎关注我们的公众号~_~  
我们是两个农转生信的小硕,打造生信星球,想让它成为一个不拽术语、通俗易懂的生信知识平台。需要帮助或提出意见请后台留言或发送邮件到[email protected]

bioinfoplanet

你可能感兴趣的:(从0开始-Linux学习笔记(七))