• 存储结构与磁盘划分


       1、物理设备的命名规则删除

          Linux系统中一切都是文件,硬件也不例外。每个文件都有自己的名称所以硬件也是有相对应的名称。

    硬件设备 文件名称
    IDE设备 /dev/hd[a-d]
    SCSI/SATA/U盘 /dev/sd[a-p]
    软驱 /dev/fd[0-1]
    打印机 /dev/lp[0-15]
    光驱 /dev/cdrom
    鼠标 /dev/mouse
    磁带机 /dev/st0或/dev/bt0

          随着时代的发展,有很多东西已经很少能再见到了。比如软驱、磁带机,IDE现在也很少见了,IDE硬盘已经被SATA硬盘替代。所以一般的硬盘设备都会是以/dev/sd 开头。
          一台电脑上能够使用多块硬盘,因此统一采用a~p共计16个字母来表示不同的硬盘(默认从a开始分配)。

    主分区最多四个最少一个
    主分区和扩展分区一共四个
    主分区和扩展分区的编号从1开始到4结束
    逻辑分区从编号5开始

          Linux系统对硬盘的识别是根据你的插入顺序,比如你有两块SATA硬盘,占用了硬盘接口1和接口3,你在使用一段时间后又在接口2插入了第三块SATA硬盘,他的目录一定是/dev/sdc。
          再一个,对于分区而言我的第三个逻辑分区未必是sda7(假设我的硬盘是SATA硬盘),对于系统而言,管理员并没有设置他的分区编号,于是系统从sda5开始往上累加数值。就是说一个人的儿子叫张三,也不等于他还有有两个哥哥/姐姐。
          学过计算机的人基本上都知道MBR(主引导记录)。主引导记录只有446个字节,而磁盘上一个扇区代表了512字节,另外的64字节代表什么呢?分区,分区记录表每记录一个分区就需要16字节的空间,所以64字节我们只能创建4个分区,这也是为什么主分区加上扩展分区一共四个的原因。


          现在主分区和扩展分区的问题解决了,可是逻辑分区呢,它又是怎么存储的呢?想必大家多多少少都学过开发,对于C语言有过了解,C语言的指针是劝退我的难题。没错,扩展分区就是一个类似于指针的东西,它存储了逻辑分区的地址。这样就能在新的扇区中创建逻辑分区了。


       2、文件系统与数据资料

          说起文件系统大家可能陌生也可能第一反应出NTFS,现在Windows的文件系统就是NTFS,还有之前的FAT系列。经常用U盘存东西的人看到FAT32应该会眼熟。Ext3、Ext4、XFS这些都是文件系统。对于RHEL7而言 我们默认的文件系统是XFS文件系统。
          与Windows不同的是,再Linux中存在一个叫做super block的"硬盘地图",Linux将所有文件的权限和属性写在其中,这部分内容被我们称作inode。每个文件都有一个独立的inode表格,该表格中记录了如下信息。

    该文件的访问权限(read、write、execute)
    该文件的所有者和所属组(owner、group)
    该文件的大小(size)
    该文件的创建或内容修改时间(ctime)
    该文件的最后一次访问时间(atime)
    该文件的修改时间(mtime)
    文件的特殊权限(SUID、SGID、SBIT)
    该文件的真实数据地址(point)

       3、挂载硬件设备

          学完这些理论知识我们在进行实际点的,Linux中的外部设备是需要用户挂载的,Windows在我们使用过程中并不需要我们进行操作,实际上Windows系统只是把挂载设置为自动挂载。

          3.1 mount命令

          mount命令用于挂载文件系统,格式为 :mount 设备目录 挂载目录
    想要永久挂载,就要在/dev/fstab文件中按照“设备文件 挂载目录 格式类型 权限选项 是否备份 是否自检”的格式写入相应信息。

    字段 意义
    设备文件 一般为设备的路径+设备名称,也可以写唯一识别码(UUID)
    挂载目录 指定要挂载到的目录,需要在挂载前创建好
    格式类型 指定文件系统的格式,比如Ext3、Ext4、iso9660(光盘默认)等
    权限类型 若设置default,则默认权限为:rw,suid,dev,exec,auto,nouser,async
    是否备份 若为1则开机后使用dump仅从才哦按备份,为0则不备份
    是否自检 若为1则开机自检,为0则不自检
    #
    # /etc/fstab
    # Created by anaconda on Sun May 17 11:24:52 2020
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/mapper/rhel-root   /                       xfs     defaults,acl        1 1
    UUID=55d7825e-b7eb-448c-bccd-5cdd6e0218d0 /boot                   xfs     defaults        1 2
    /dev/mapper/rhel-swap   swap                    swap    defaults        0 0
    
    

          3.2 umount命令

          umount命令用于撤销已经挂载的设备文件,格式为:umount [挂载点/设备文件]

       4、添加硬盘设备

          前面已经了解了挂载设备的理论知识,现在就是要动手实践了。
          首先我们要在虚拟机的硬件设置中添加一块新的硬盘(假设这是第二块硬盘),一直点下一步就可以。


          在指定磁盘容量的地方根据自己的情况填写即可。


          添加硬盘结束后开启RHEL7系统。然后使用ls -ld /dev/sdb*,看看有没有文件出现。如果有就是系统识别成功,可以对硬盘进行正常的分区操作。

    [root@localhost Desktop]# ls -ld /dev/sdb*
    brw-rw----. 1 root disk 8, 16 May 21  2020 /dev/sdb
    

          4.1 fdisk命令

          在Linux系统中管理硬盘最常用的方法就是fdisk命令了。fdisk命令用于管理磁盘分区,格式为:fdisk [磁盘名称],他提供了添加、删除、转换分区等功能。
    | 参数 | 作用 |
    | m | 查看全部可用参数 |
    | n | 添加新的分区 |
    | d | 删除某个分区 |
    | l | 列出所有可用的分区类型 |
    | t | 改变某个分区的分区类型 |
    | p | 查看分区信息 |
    | w | 保存并退出 |
    | q | 不保存直接退出 |
          与其他命令不同的是必须要执行fdisk [磁盘名称]之后才能使用这些参数。
          我们创建一个主分区,格式化并挂载

    [root@localhost Desktop]# fdisk /dev/sdb          # 使用fdisk命令
    Welcome to fdisk (util-linux 2.23.2).
    
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    Device does not contain a recognized partition table
    Building a new DOS disklabel with disk identifier 0xcd926670.
    
    Command (m for help): n    # 使用参数n创建分区
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    Select (default p): p    # 输入p创建主分区
    Partition number (1-4, default 1): 1    # 主分区的编号
    First sector (2048-41943039, default 2048):     # 起始的扇区位置,回车默认即可
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +5G    # 必须要有加号,并输入大小。如果不输入默认全部都使用
    Partition 1 of type Linux and of size 5 GiB is set
    
    Command (m for help): p    # 参数p,查看结果
    
    Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Disk identifier: 0xcd926670
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1            2048    10487807     5242880   83  Linux
    
    Command (m for help): w    # 查看完结果之后千万不要直接关闭窗口或用ctrl+c终止命令,要使用w保存信息
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    Syncing disks.
    [root@localhost Desktop]# mkfs    # 输入mkfs并按两次tab键即可看到格式化命令mkfs所支持的所有文件系统格式
    mkfs         mkfs.ext2    mkfs.fat     mkfs.vfat    
    mkfs.btrfs   mkfs.ext3    mkfs.minix   mkfs.xfs     
    mkfs.cramfs  mkfs.ext4    mkfs.msdos   
    [root@localhost Desktop]# mkfs.xfs /dev/sdb1    #格式化分区sdb1
    meta-data=/dev/sdb1              isize=256    agcount=4, agsize=327680 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=0
    data     =                       bsize=4096   blocks=1310720, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
    log      =internal log           bsize=4096   blocks=2560, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    [root@localhost Desktop]# cd 
    [root@localhost ~]# mkdir primary1    # 在挂载之前创建挂载目录(挂载点)
    [root@localhost ~]# mount /dev/sdb1 primary1/    #挂载sdb1
    [root@localhost ~]# df -h    # 查看挂载情况
    Filesystem             Size  Used Avail Use% Mounted on
    /dev/mapper/rhel-root   18G  6.9G   11G  40% /
    devtmpfs               986M     0  986M   0% /dev
    tmpfs                  994M  140K  994M   1% /dev/shm
    tmpfs                  994M  8.8M  986M   1% /run
    tmpfs                  994M     0  994M   0% /sys/fs/cgroup
    /dev/sda1              497M  118M  379M  24% /boot
    /dev/sr0               3.5G  3.5G     0 100% /run/media/root/RHEL-7.0 Server.x86_64
    /dev/sdb1              5.0G   33M  5.0G   1% /root/primary1
    [root@localhost ~]# 
    

          挂载操作就做好了,不过这只是临时挂载,想要永久挂载还要在/etc/fstab中添加相应内容,上文已经提到过了便不再赘述。

    [root@localhost ~]# vim /etc/fstab
    #
    # /etc/fstab
    # Created by anaconda on Sun May 17 11:24:52 2020
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/mapper/rhel-root   /                       xfs     defaults,acl        1 1
    UUID=55d7825e-b7eb-448c-bccd-5cdd6e0218d0 /boot                   xfs     defaults        1 2
    /dev/mapper/rhel-swap   swap                    swap    defaults        0 0
    
    #以上是没有修改的/dev/fstab文件。下文是我要填入的信息
    
    /dev/sdb1               /root/primary1          xfs     defaults         0 0
    

          这样主分区就创建并挂载好了。说完了主分区我们再说一下逻辑分区。
          逻辑分区想要正常使用就需要依托扩展分区,所以第一次创建逻辑分区之前还要创建扩展分区。

    [root@localhost ~]# fdisk /dev/sdb    # 使用fdisk命令
    Welcome to fdisk (util-linux 2.23.2).
    
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    
    Command (m for help): n    # 创建新分区
    Partition type:
       p   primary (1 primary, 0 extended, 3 free)
       e   extended
    Select (default p): e    # 输入e创建扩展分区
    Partition number (2-4, default 2):     # 默认编号
    First sector (10487808-41943039, default 10487808):    # 默认起始扇区 
    Using default value 10487808
    Last sector, +sectors or +size{K,M,G} (10487808-41943039, default 41943039):    # 全面可用空间
    Using default value 41943039
    Partition 2 of type Extended and of size 15 GiB is set    # 新建的磁盘一共20G,主分区用了5G,给扩展分区全部空间,所以有"size 15 GiB"
    
    Command (m for help): p    # 查看结果
    
    Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Disk identifier: 0xcd926670
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1            2048    10487807     5242880   83  Linux
    /dev/sdb2        10487808    41943039    15727616    5  Extended    # 扩展分区
    
    Command (m for help):n   # 新建分区
    Partition type:
       p   primary (1 primary, 1 extended, 2 free)
       l   logical (numbered from 5)
    Select (default p): l    # l代表logical,及逻辑分区,输入l
    Adding logical partition 5    # 编号是从第5开始
    First sector (10489856-41943039, default 10489856):    # 默认起始扇区 
    Using default value 10489856
    Last sector, +sectors or +size{K,M,G} (10489856-41943039, default 41943039): +10G    # 输入大小           
    Partition 5 of type Linux and of size 10 GiB is set
    
    Command (m for help): n    # 创建分区
    Partition type:
       p   primary (1 primary, 1 extended, 2 free)
       l   logical (numbered from 5)
    Select (default p): l    # 创建逻辑分区
    Adding logical partition 6    # 编号6
    First sector (31463424-41943039, default 31463424):    #默认起始扇区 
    Using default value 31463424
    Last sector, +sectors or +size{K,M,G} (31463424-41943039, default 41943039):    # 剩余空间 
    Using default value 41943039
    Partition 6 of type Linux and of size 5 GiB is set
    
    Command (m for help): p    # 查看结果
    
    Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Disk identifier: 0xcd926670
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1            2048    10487807     5242880   83  Linux
    /dev/sdb2        10487808    41943039    15727616    5  Extended
    /dev/sdb5        10489856    31461375    10485760   83  Linux
    /dev/sdb6        31463424    41943039     5239808   83  Linux
    
    Command (m for help): w    # 保存并退出
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    
    WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
    The kernel still uses the old table. The new table will be used at
    the next reboot or after you run partprobe(8) or kpartx(8)
    Syncing disks.
    [root@localhost ~]# 
    

          逻辑分区的挂载和主分区没什么区别,参考上面的主分区挂载吧,我就不扩大篇幅了。

          4.2 du命令

          在我们开始使用新的分区之前先介绍一个用于查看文件数据占用量的du命令,格式为:du [选项] [文件]。简单来说,该命令就是查看一个或多个文件占用了多大的硬盘空间。
          -s是递归计算文件的大小,主要用于显示目录及目录内文件的总大小;-h是一般的-h参数,用于人性化的显示单位。

    [root@localhost ~]# du -sh anaconda-ks.cfg 
    4.0K	anaconda-ks.cfg
    [root@localhost ~]# du -sh /root
    3.6G	/root
    [root@localhost ~]# 
    

       5、添加交换分区

          SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后把内存中暂时不用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术。简单来说该技术就是将SWAP分区作为虚拟内存来使用。
          在生产环境中SWAP分区一般为物理内存的1.5~2倍。

    [root@localhost Desktop]# mkswap /dev/sdb1    # 使用swap格式化命令将其格式化为swap分区
    Setting up swapspace version 1, size = 5242876 KiB
    no label, UUID=04fc016f-ec00-407d-a5a2-c83a67d36aec
    [root@localhost Desktop]# free -m    # 查看swap分区扩容之前的大小
                 total       used       free     shared    buffers     cached
    Mem:          1987        814       1173          9          0        270
    -/+ buffers/cache:        543       1444
    Swap:         2047          0       2047
    [root@localhost Desktop]# swapon /dev/sdb1    # 激活swap分区
    [root@localhost Desktop]# free -m    # 查看swap分区扩容之后的大小
                 total       used       free     shared    buffers     cached
    Mem:          1987        817       1170          9          0        271
    -/+ buffers/cache:        545       1442
    Swap:         7167          0       7167
    [root@localhost Desktop]# 
    

          SWAP分区属于主分区,所以在给原有SWAP分区扩容时请创建主分区再用mkswap格式化。同样的想要让swap分区永久扩容请将相关信息写入/dev/fstab文件中。

       6、磁盘容量配额

          Linux的设计初衷就是让许多人一起使用并执行各自的任务,从而成为多用户、多任务的操作系统。但是硬件资源是固定且有限的,如果不对一部分用户进行限制很快就会填满硬盘空间。
          在这种前提下root用户就需要使用磁盘容量配额服务来限制某位或某个用户组针对特定文件夹可以使用的最大硬盘空间或最大文件数,一旦到达最大值就不再允许继续使用。可以用quota命令进行磁盘容量配额管理。从而限制用户的硬盘可用容量或所能创建的最大文件个数。

    软限制:当达到软限制是会提示用户,但仍允许用户在限定的额度内继续使用。
    硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。

          想要开启quota服务还要/dev/fstab文件中添加uquota,早期的Linux系统使用usrquota
    我们要使用quota就要保证用户能够正常写入数据。

    [root@localhost Desktop]# chmod -Rf o+w /quota    # 使用任何一个目录都是可以的
    [root@localhost Desktop]# 
    
    

          6.1 xfs_quota命令

          xfs_quota命令是一个专门针对XFS文件系统来管理quota磁盘容量配额服务而设计出来的命令,格式为:xfs_quota [参数] 配额 文件系统
    。其中-c参数用于非交互模式执行,-x参数用于专家模式执行,让工作人员能对quota进行更多更复杂的配置。

    # 第1步:在/etc/fstab文件里添加类似于第11行的相应信息
    # /etc/fstab
    # Created by anaconda on Sun May 17 11:24:52 2020
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/mapper/rhel-root   /                       xfs     defaults        1 1
    UUID=55d7825e-b7eb-448c-bccd-5cdd6e0218d0 /boot                   xfs     defaults        1 2
    /dev/mapper/rhel-swap   swap                    swap    defaults        0 0
    /dev/sdb2               /quota                  xfs     defaults,uquota         0 0 
    
    # 第2步:使用命令设置软硬限制
    [root@localhost Desktop]# xfs_quota -xc "limit bsoft=30m bhard=60m isoft=3 ihard=6 linuxprobe" /quota
    [root@localhost Desktop]# xfs_quota -xc report /quota/    #查看设置结果
    User quota on /quota (/dev/sdb2)
                                   Blocks                     
    User ID          Used       Soft       Hard    Warn/Grace     
    ---------- -------------------------------------------------- 
    root                0          0          0     00 [--------]
    linuxprobe          0      30720      61440     00 [--------]
    
    [root@localhost Desktop]# 
    
    # 完成上述操作后,切换普通用户分别创建几个文件。
    
    [linuxprobe@localhost ~]$ dd if=/dev/zero of=/quota/test bs=50M count=1
    1+0 records in
    1+0 records out
    52428800 bytes (52 MB) copied, 0.0446597 s, 1.2 GB/s    # 在限额之内能够创建
    [linuxprobe@localhost ~]$ dd if=/dev/zero of=/quota/test bs=90M count=1
    dd: error writing ‘/quota/test’: Disk quota exceeded    # 超过限额报错
    1+0 records in
    0+0 records out
    62914560 bytes (63 MB) copied, 0.362607 s, 174 MB/s
    [linuxprobe@localhost ~]$ 
    
    

          这个限额是一个累加值(数量和大小都是累加值),当某个用户创建的所有文件占用磁盘额度超过设定值,就会报错并终止操作。

          6.2 edquota命令

          edquota命令用于编辑quota配置限额,格式为:edquota [参数] [用户]。-u参数可以针对特定用户进行设置;-g参数可以针对某个用户组进行设置。

    [root@localhost ~]# edquota -u linuxprobe    # 使用命令会调用vi编辑器
    Disk quotas for user linuxprobe (uid 1000):
      Filesystem                   blocks       soft       hard     inodes     soft     hard
      /dev/sdb2                     61440      30720      61440          1        3        6
    
    # 修改前 ↑ 修改后 ↓
    
    Disk quotas for user linuxprobe (uid 1000):
      Filesystem                   blocks       soft       hard     inodes     soft     hard
      /dev/sdb2                     61440      307200      614400          1        3        6
      
    # 修改完限额之后再切换为普通用户
    
    xprobe@localhost ~]$ dd if=/dev/zero of=/quota/test bs=100M count=1
    1+0 records in
    1+0 records out
    104857600 bytes (105 MB) copied, 0.3198 s, 328 MB/s
    [linuxprobe@localhost ~]$ 
    
    # 经过修改之后创建了远超之前限额的文件并没有报错
    
  • 相关阅读:
    BZOJ5321 JXOI2017加法(二分答案+贪心+堆+树状数组)
    BZOJ5089 最大连续子段和(分块)
    Codeforces 893F(主席树+dfs序)
    BZOJ5092 分割序列(贪心)
    Codeforces Round #525 Div. 2 自闭记
    364. Nested List Weight Sum II
    362. Design Hit Counter
    369. Plus One Linked List
    370. Range Addition
    366. Find Leaves of Binary Tree
  • 原文地址:https://www.cnblogs.com/QW-kk/p/12933539.html
Copyright © 2020-2023  润新知