Linux之磁盘与文件系统管理

1.  文件系统组成

    1.  ext2/ext3/ext4

        1.  superblock是记录整个文件系统相关信息的地方。

            block与inode的总量

            未使用与已使用的inode/block数量

        2.  data block

            用来放置文件内容数据的地方。

            block的大小与数量在格式化完后不能改变了

            每个block内最多只能够放置一个文件的数据

            如果文件大于block的大小,则一个文件会占用多个block数量

            如果文件小于block,则该block的剩余容量就不能够再被使用了

        3.  inode table

        4.  查看文件系统信息

            dumpe2fs /dev/sda  

    2.  xfs

        1.  优点

            比ext格式化更快  

        2.  查看xfs文件系统

            xfs_info

            例子: xfs_info /

meta-data=/dev/mapper/centos-root isize=512    agcount=287, agsize=3276800 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=939524096, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=6400, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

            第 1 行里面的 isize 指的是 inode 的容量,每个有 256bytes 这么大。至于 agcount 则是前面谈到的储存
                区群组 (allocation group) 的个数,共有 4 个, agsize 则是指每个储存区群组具有 65536 block 。配
                合第 4 行的 block 设定为 4K,因此整个文件系统的容量应该就是 4*65536*4K 这么大!
            第 2 行里面 sectsz 指的是逻辑扇区 (sector) 的容量设定为 512bytes 这么大的意思。
            第 4 行里面的 bsize 指的是 block 的容量,每个 block 4K 的意思,共有 262144 block 在这个文
                件系统内。
            第 5 行里面的 sunit swidth 与磁盘阵列的 stripe 相关性较高。这部份我们底下格式化的时候会举一个
                例子来说明。
            第 7 行里面的 internal 指的是这个登录区的位置在文件系统内,而不是外部设备的意思。且占用了 4K *
                2560 block,总共约 10M 的容量。
            第 9 行里面的 realtime 区域,里面的 extent 容量为 4K。不过目前没有使用。

2.  文件系统的操作命令

    1.  查看磁盘与目录的容量

        1.  df

            -a  列出所有的文件系统,包括系统特有的/proc的文件系统

            -k  容量以kb列出

            -m  容量以mb列出

            -h  以人类易读的方式,列出所有分区的容量

            -i  以inode的数量列出,而不是容量

            -T  多出一列关于文件系统的类型

        2.  du

            -h  以人类易读的方式列出容量

            -a  列出所有的文件和目录容量

            -s  列出当前目录的总容量,而不列出各个文件目录占用的容量

            --max-depth=1  列出目录下的第一层级的容量

    2.  硬链接与软链接

        参考文档: https://www.cnblogs.com/yangjianbo/articles/8891233.html

    3.  磁盘分区格式化挂载

        1.  观察分区状态

            1.  lsblk  列出所有磁盘和分区的信息           

[root@nginx_fastdfs_server1 bin]# lsblk -ip
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
/dev/sda                      8:0    0  8.2T  0 disk 
|-/dev/sda1                   8:1    0    1M  0 part 
|-/dev/sda2                   8:2    0    1G  0 part /boot
`-/dev/sda3                   8:3    0  8.2T  0 part 
  |-/dev/mapper/centos-root 253:0    0  8.1T  0 lvm  /
  |-/dev/mapper/centos-swap 253:1    0 15.4G  0 lvm  [SWAP]
  `-/dev/mapper/centos-home 253:2    0   80G  0 lvm  /home

              NAME:就是装置的文件名啰!会省略 /dev 等前导目录!
              MAJ:MIN:其实核心认识的装置都是透过这两个代码来熟悉的!分别是主要:次要装置代码!
              RM:是否为可卸除装置 (removable device),如光盘、 USB 磁盘等等
              SIZE:当然就是容量啰!
              RO:是否为只读装置的意思
              TYPE:是磁盘 (disk)、 分区槽 (partition) 还是只读存储器 (rom) 等输出
              MOUTPOINT:就是前一章谈到的挂载点!

            2.  blkid  列出设备的UUID              

/dev/sda2: UUID="dd8479d5-5170-489b-9ba6-99b77bf9dd8d" TYPE="xfs" 
/dev/sda1: UUID="fbb33f89-8ede-4872-8db6-17d570746c91" TYPE="xfs" 
/dev/sda3: UUID="cc51a611-e554-4182-ba63-9a5440e11c5a" TYPE="swap" 

            3.  parted  列出分区表类型及分区信息

                parted /dev/sda print

Model: DELL PERC H730P Adp (scsi)
Disk /dev/sda: 2398GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt  
Disk Flags: pmbr_boot

Number  Start   End     Size    File system  Name  标志
 1      1049kB  2097kB  1049kB                     bios_grub
 2      2097kB  1076MB  1074MB  xfs
 3      1076MB  2398GB  2397GB                     lvm

        2.  磁盘分区工具

                fdisk  MBR分区格式使用

                  fdisk /dev/sda

                gdisk  GPT分区格式使用

                  yum install gdisk -y

                  gdisk /dev/sda

                  d  删除一个分区

                  n  添加一个分区

                  p  打印分区表

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            4095   1024.0 KiB  EF02  
   2            4096         2101247   1024.0 MiB  0700  
   3         2101248     17575442431   8.2 TiB     8E00  
Number: 分区槽编号, 1 号指的是 /dev/vda1 这样计算。
Start (sector):每一个分区槽的开始扇区号码位置
End (sector):每一个分区的结束扇区号码位置,与 start 之间可以算出分区槽的总容量
Size:就是分区槽的容量了
Code:在分区槽内的可能的文件系统类型。 Linux 为 8300, swap 为 8200。不过这个项目只是一个提示而已,不见得真的代表此分区槽内的文件系统喔!
Name:文件系统的名称等等。

                  q  不保存退出

                  w  保存退出

                  l   显示文件系统的ID

                  通过gdisk新建完一个分区,保存退出分区表,并不能立刻生效,需要重启系统,或者执行命令partprobe -s 

        3.  磁盘格式化

            1.  mkfs.xfs

                mkfs.xfs /dev/sda4

                mkfs -t xfs /dev/sda4

            2.  mkfs.ext4

                mkfs.ext4 /dev/sda5

                mkfs -t ext4 /dev/sda5

            3.  mkfs

                mkfs -t vfat /dev/sda6

        4.  文件系统检验

            1.  xfs_repair

                -f  后面接的是文件

                -n  只检查不修复

                -d  在单人模式下,对/根目录进行检查与修复的操作,慎用!

                xfs_repair /dev/sda5  检查新建的分区

                xfs_repair /dev/centos/home  检查挂载的分区的时候,需要先卸载

            2.  fsck

                -f  强制检查文件系统   

                fsck.ext4 /dev/sda5

                fsck.ext4 -f /dev/sda6

                例子:

Centos 6.5启动 an error occurred during the file system check错误的解决
解决办法:
输入密码进行修复
执行指令:fsck -y
运行完后reboot 就可以了

        5.  文件系统挂载与卸载

            单一文件系统不应该被重复挂载在不同的挂载点

            单一目录不应该重复挂载多个文件系统

            要作为挂载点的目录,理论上应该都是空目录才是

            1.  mount

                -t  指定文件系统类型

                mount [-t 文件系统] LABEL=''   挂载点

                mount [-t 文件系统] UUID=''   挂载点

                mount [-t 文件系统] 装置文件名=''   挂载点

                挂载之前,先使用命令blkid,查看对应的UUID

            2.  umount

                卸载

3.  开机自动挂载

    1.  系统挂载限制

        根目录 / 是必须挂载的﹐而且一定要先于其它 mount point 被挂载进来。        

        其它 mount point 必须为已建立的目录﹐可任意指定﹐但一定要遵守必须的系统目录架构原则 (FHS)

        所有 mount point 在同一时间之内﹐只能挂载一次。
        所有 partition 在同一时间之内﹐只能挂载一次。
        如若进行卸除﹐您必须先将工作目录移到 mount point(及其子目录) 之外。

    2.  /etc/fstab文件分析      

/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=b78fbee9-c71b-4e1e-9e7b-ac07991ad603 /boot                   xfs     defaults        0 0
/dev/mapper/centos-home /home                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
第一列:指定设备名称,UUID,LABEL
第二列:挂载点
第三列:文件系统类型
第四列:文件系统参数
第五列:是否使用dump备份
第六列:是否使用fsck检查扇区 
参数 内容意义
async/sync
异步/同步
设定磁盘是否以异步方式运作!预设为 async(效能较佳)

 

auto/noauto
自动/非自动
当下达 mount -a 时,此文件系统是否会被主动测试挂载。预设为 auto
rw/ro
可擦写/只读
让该分区槽以可擦写或者是只读的型态挂载上来,如果你想要分享的数据是不给用
户随意变更的, 这里也能够设定为只读。则不论在此文件系统的文件是否设定
w
权限,都无法写入喔!
exec/noexec
可执行/不可执行
限制在此文件系统内是否可以进行『执行』的工作?如果是纯粹用来储存数据的目
录, 那么可以设定为
noexec 会比较安全。不过,这个参数也不能随便使用,因为
你不知道该目录下是否默认会有执行档。
举例来说,如果你将
noexec 设定在 /var ,当某些软件将一些执行文件放置于 /var
下时,那就会产生很大的问题喔! 因此,建议这个 noexec 最多仅设定于你自定义
或分享的一般数据目录。
user/nouser
允许/不允许使用者挂载
是否允许用户使用 mount 指令来挂载呢?一般而言,我们当然不希望一般身份的
user 能使用 mount 啰,因为太不安全了,因此这里应该要设定为 nouser 啰!
suid/nosuid
具有/不具有 suid 权限
该文件系统是否允许 SUID 的存在?如果不是执行文件放置目录,也可以设定为
nosuid 来取消这个功能!
defaults 同时具有 rw, suid, dev, exec, auto, nouser, async 等参数。 基本上,预设情况使用
defaults 设定即可!

4.  挂载ISO文件

    1.  下载要使用的ISO文件

    2.  创建挂载目录

    3.  mount -o loop ISO文件所在目录 挂载点

    4.  umount 挂载点

5.  swap分区的创建

    1.  使用实体分区建立swap

        1.  先分区

            使用gdisk建立一个新的分区/dev/sda7

        2.  格式化分区

            mkswap /dev/sda7

        3.  启动swap分区

            swapon /dev/sda7

        3.  查看一下

            free

            swapon -s 

    2.  使用文件建立swap分区

        1.  使用dd命令,创建一个128M的文件

        2.  格式化成为swap分区

        3.  启动swap分区

        4.  查看一下

    3.  关闭swap分区

        swapoff /dev/sda7

    4.  关闭所有swap分区

        swapoff -a 

    5.  什么是虚拟内存

        如果物理内存不够用时,可以将那些最近很少使用的页面数据(Page)置换出去,即切换到硬盘上,但是要注意的是内存文件的格式和硬盘中文件的格式是不一样的,所以这个分区必须格式化成跟内存兼容的模式不能转换成文件的格式。以便把内存的page直接存入这个分区,方便内存直接调用。而这个页面(page)数据对于32位的操作系统一个page大概是4K左右,对于64位操作系统这个page大小是可变的,4k-2M的大小都是比较常见的。事实上到底能使用多大的页面(page)取决于CPU而不取决于内存哟!这就是虚拟内存的概念。在linux上我们称之为交换分区。记住,虚拟内存必须是一个单独的分区。

    6.  虚拟内存能代替物理内存运行程序吗

        答案是否定的,只是使用虚拟内存暂时保存数据,而不是代替物理内存运行程序。 

    7.  虚拟内存的作用

        当运行某个大程序、大游戏,需要的内存超过空闲内存但小于物理内存总量时,会暂时把内存里这些数据放到磁盘上的虚拟内存里,空出物理内存运行游戏。等退出游戏后,又会把虚拟内存里的东西读出来,放回物理内存。所以,虚拟内存,并不是用来虚拟物理内存的,而是暂存数据的。如果对内存的需求大于物理内存总量,那虚拟内存设多大都不管用。电脑内存太低,根本的方法还是增加物理内存,才能流畅。虚拟内存机制上就不管用,即使管用,比物理内存低100倍的速度,也管不上什么实际的作用。所以,虚拟内存大了是没用的,反而白占用磁盘空间。

 

posted @ 2021-10-22 10:06  奋斗史  阅读(183)  评论(0)    收藏  举报