美文网首页
文件系统简介

文件系统简介

作者: 诺之林 | 来源:发表于2020-06-14 17:36 被阅读0次

    目录

    磁盘硬件

    HDD (Hard Disk Drive)

    • 组成 => 缓存 + 磁头 + 盘片

    • 性能 => 缓存 + 转速 (5.4k/7.2k/10k/15k RPM) + 尺寸 (3.5/2.5 英寸)

    • 接口 => SATA (桌面 100MB/s) + SAS (服务器 200MB/s)

    SSD (Solid State Drive)

    • 接口 => SATA + M.2

    • 通道 => SATA + PCI-E (PCI-Express)

    • 协议 => AHCI (Advanced Host Controller Interface) + NVMe (Non-Volatile Memory express)

    接口 通道 (总线) 协议 速度 (实际)
    SATA SATA AHCI 500MB/s
    M.2 SATA AHCI 500MB/s
    M.2 PCI-E NVMe 3000MB/s

    磁盘阵列

    RAID (Redundant Array of Independent Disk) 独立冗余磁盘阵列

    RAID 原理 存储效率 优缺点
    RAID0 Disk 1 => A1 A3 A5 A7
    Disk 2 => A2 A4 A6 A8
    100% 读写性能高
    但是无冗余
    RAID1 Disk 1 => A1 A2 A3 A4
    Disk 2 => A1 A2 A3 A4
    50% 读写性能低
    但是有冗余
    RAID5 Disk 1 => A1 B1 C1 Dp
    Disk 2 => A2 B2 Cp D1
    Disk 3 => A3 Bp C2 D2
    Disk 4 => Ap B3 C3 D3
    75% 读性能高 写性能低
    且有冗余
    RAID10 Disk 1 => A1 A3 A5 A7
    Disk 2 => A1 A3 A5 A7
    Disk 3 => A2 A4 A6 A8
    Disk 4 => A2 A4 A6 A8
    50% 读写性能高
    并且有冗余

    文件系统

    data block => 实际存储的数据
    
    super block => 文件系统信息 data block和inode总数/已使用/未使用
    
    inode => 文件目录结构、类型、大小、所有者、修改时间、data block
    
    // 查看文件系统信息
    df -hT
    
    // block size 4096
    dumpe2fs -h /dev/vda1
    

    如何理解Windows FAT最大支持2G文件大小?

    主分区 最多只有4个
    
    主分区 才能作为引导分区
    
    // 系统初始化时挂载根文件系统
    void mount_root(void)
    {
        int i, free;
        struct super_block *p;
        struct m_inode *mi;
    
        if (32 != sizeof(struct d_inode))
            panic("bad i-node size");
        // 初始化file结构体列表,struct file file_table[NR_FILE];
        for (i = 0; i < NR_FILE; i++)
            file_table[i].f_count = 0;
        // 如果根文件系统是软盘提示插入软盘
        if (MAJOR(ROOT_DEV) == 2)
        {
            printk("Insert root floppy and press ENTER");
            wait_for_keypress();
        }
        // 初始化超级块列表
        for (p = &super_block[0]; p < &super_block[NR_SUPER]; p++)
        {
            p->s_dev = 0;
            p->s_lock = 0;
            p->s_wait = NULL;
        }
        // 读取某个设备(硬盘分区)中的超级块,即根文件系统的超级块
        if (!(p = read_super(ROOT_DEV)))
            panic("Unable to mount root");
        // 获取根文件系统的第一个inode节点,里面存的是根目录的数据
        if (!(mi = iget(ROOT_DEV, ROOT_INO)))
            panic("Unable to read root i-node");
        // mi在下面四个地方有赋值,iget里面的get_empty_inode函数已经设置i_count=1,所以这里加三就行
        mi->i_count += 3; /* NOTE! it is logically used 4 times, not 1 */
        // 超级块挂载到了mi对应的inode节点,p->s_isup设置根文件系统的根节点
        p->s_isup = p->s_imount = mi;
        // 设置当前进程的根文件目录和当前工作目录
        current->pwd = mi;
        current->root = mi;
        free = 0;
        // 文件系统的逻辑数据块和inode数量
        i = p->s_nzones;
        while (--i >= 0)
            if (!set_bit(i & 8191, p->s_zmap[i >> 13]->b_data))
                free++;
        printk("%d/%d free blocks\n\r", free, p->s_nzones);
        free = 0;
        i = p->s_ninodes + 1;
        while (--i >= 0)
            if (!set_bit(i & 8191, p->s_imap[i >> 13]->b_data))
                free++;
        printk("%d/%d free inodes\n\r", free, p->s_ninodes);
    }
    

    案例实战

    • 案例1: RC服务器磁盘占用90%+
    // 查看文件系统信息
    df -hT
    
    // 查看当前文件夹大小
    du -sh .[!.]* * | sort -hr | head
    
    • 案例2: 服务器挂载新的数据盘
    添加新磁盘 => 阿里云
    
    fdisk -l // 查看分区
    
    mkfs -t ext4 /dev/sdb1 // 格式化分区
    
    mount /dev/sdb1 /opt/ // 建立挂载点 
    
    vim /etc/fatab // 开机自动挂载
    
    image.png image.png

    参考

    相关文章

      网友评论

          本文标题:文件系统简介

          本文链接:https://www.haomeiwen.com/subject/pikxxktx.html