linux基础学习笔记7

目录

1.inode记录的数据

2.超级区块的记录

3.数据区块的记录

5.linux文件系统的运行

6.挂载(文字简介)

7.linux支持的文件系统

8.XFS文件系统简介

9.磁盘与目录的容量

df        列出文件系统的整体磁盘使用量

du        查看文件系统的磁盘使用量

10.文件链接

        硬链接

        符号链接

12.磁盘分区观察

lsblk 列出存储设备

blkid 列出设备的UUID(lsblk -f 也可以)

13.磁盘分区(我的为gpt分区,所以使用gdisk)

partprobe -s (不加 -s 则不会显示信息)

14.磁盘格式化(创建文件系统)

XFS文件系统格式化:

ext4文件系统格式化:

15.文件系统的检验

XFS文件系统

ext4文件系统

16.文件系统的挂载与卸载

17,自定义硬盘/文件系统参数

18.挂载(设置为自动挂载)

19.创建内存交换分区

使用物理分区创建:

使用大文件创建:

20.磁盘空间的浪费

21.利用parted 分区


1.inode记录的数据

  文件的属性、拥有者与用户组、文件大小、mtime、atime、ctime、定义文件特性的标识、文件真正内容指向

  每个inode 大小固定

  每个文件仅会占用一个inode

  系统读取文件时会先找到inode

2.超级区块的记录

  数据区块与inode总量

  未使用与已使用的inode与数据区块数量

  数据区块与inode的大小

  文件系统挂载时间、最近一次写入数据的时间、最近一次检验磁盘的时间等文件系统的相关信息

  一个有效位数值,若此文件系统已被挂载,则有效位为0,否则为1

  

  dumpe2fs -b 设备文件名  列出保留为坏道的部分(迷...)

      -h 设备文件名  仅列出superblock 的数据,不会列出其他的区段内容

3.数据区块的记录

记录数据的实际内容

每创建一个目录,文件系统会分配一个inode 与至少一个区块

4.磁盘分区并不是越大越好,如果文件系统空间很大,数据写入将会变成填入式,导致文件写入的区块很分散,读取时磁盘转动幅度大,读取性能会降低

5.linux文件系统的运行

简单的说,一个文件加载到内存后,会被标记为 clean ,当数据改动后,则会变为 dirty ,系统会不定时的将内存中的dirty数据写回磁盘

系统会将常用的文件数据放入内存的缓冲区,以加速文件系统的读写操作

因此,linux的物理内存最后会被用光,这是正常现象,可加速系统性能

可手动写回数据,正常关机也会写回,非正常关机则不会

6.挂载(文字简介)

将文件系统与目录树结合的操作为挂载(目录树的介绍可查看第五章最后)

一个可以被挂载的数据通常称为文件系统而不是硬盘分区

挂载点一定是目录

xfs文件系统的顶层目录inode一般为128号,inode同为128且文件属性不同,则挂载点也不同

7.linux支持的文件系统

通过

ls -l /lib/modules/$(uname -r)/kernel/fs

查看,通过

cat /proc/filesystems

查看已加载到内存中支持的文件系统

8.XFS文件系统简介

对linux支持度最完整的ext系列格式化超慢,采用预先规划的方法,适合小磁盘容量

而xfs这个被开发来用于高容量磁盘以及高性能文件系统之用的日志式文件系统相当适合现在的系统环境

xfs文件系统的三个部分:

数据区:与ext系列的区块群组类似,不过xfs中的inode与区块是动态分配的,不是预先规划的

文件系统活动登陆区:系统所有操作会在这个区块记录,文件系统因某些缘故挂掉后,系统会拿这个登陆区来检验修复

实时运行区:有文件要被建立时,xfs会在这个区段里面找一个或数个extent区块,将文件放置于此,待文件属性分配完毕后再写入到inode与区块中

通过 tune2fs 查看ext 文件系统的信息

通过 xfs_info 观察文件系统的描述数据(无法使用此命令的问题已放入 问题总结)

先通过

[root@zjwLinux ~]# df -T /
Filesystem     Type 1K-blocks    Used Available Use% Mounted on
/dev/nvme0n1p5 xfs  244199936 6915460 237284476   3% /

查看 / 的分区及文件系统(xfs_info 命令需要下载,见 “问题总结” 文章)

[root@zjwLinux ~]# xfs_info /dev/nvme0n1p5
meta-data=/dev/nvme0n1p5         isize=512    agcount=16, agsize=3817488 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1
data     =                       bsize=4096   blocks=61079808, imaxpct=25
         =                       sunit=4      swidth=32 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=29824, version=2
         =                       sectsz=512   sunit=4 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

第一行的 isize 为 inode容量,agcount 为存储区群组16个,agsize 为每个存储区群组有3817488个区块

第二行 sectsz为逻辑扇区容量

第五行bsize 为区块的容量 4K

第六行 sunit和 swidth 与磁盘阵列的stripe相关性较高

第八行 internal 指的是这个登陆区的位置在文件系统内,占用了 4K*29824的容量

第十行 realtime 里面的 extent 容量为 4K ,目前未使用

9.磁盘与目录的容量

df        列出文件系统的整体磁盘使用量

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

        -k 以KBytes 的容量显示各文件系统

        -m 以MBytes显示

        -h  human-readable

        -H 切换十进制

        -T 连同文件系统名一起显示

        -i 不用容量显示,用inode数量显示

du        查看文件系统的磁盘使用量

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

        -h

        -s 仅列出总量,不列出每个个别目录占用量

        -S 不包括子目录的总计

        -k

        -m

[root@zjwLinux ~]# df 
Filesystem     1K-blocks    Used Available Use% Mounted on
dev              8133472       0   8133472   0% /dev
run              8144020    1420   8142600   1% /run
/dev/nvme0n1p5 244199936 6930856 237269080   3% /
tmpfs            8144020     380   8143640   1% /dev/shm
tmpfs            8144020       8   8144012   1% /tmp
/dev/nvme0n1p3   1046512   72332    974180   7% /boot
tmpfs            1628804      32   1628772   1% /run/user/1000

 Filesystem 代表该文件在哪个硬盘分区

1K-blocks 单位为1KB

Mounted on 挂载点

10.文件链接

        硬链接

在这之前需要知道的是文件的内容是由inode的记录指向的,而硬链接则是多个文件名对应同一个inode,所以硬链接的两个文件是同一个文件,属性内容都相同,删除其中一个,inode与区块都存在,可通过另外一个来操作

ln 源文件 目标文件

 硬链接的限制:不能跨文件系统,不能链接目录

        符号链接

与硬链接不同,这是一个单独的文件,有独立的inode,这个文件会让数据指向它链接的那个文件的文件名,源文件被删除后,符号链接就会打不开。链接文件的大小等于被链接文件名,如

[root@zjwLinux ~]# ln -s /etc/vimrc testvimrc
[root@zjwLinux ~]# ls -l testvimrc 
lrwxrwxrwx 1 root root 10 Jul  4 15:38 testvimrc -> /etc/vimrc

10即为 /etc/vimrc 名称所占字节数

        ln        默认硬链接

                -s 符号链接

                -f 若目标文件存在,则主动删除目标文件重新建立

 当建立新的目录时,目录的链接数为2,上层目录链接数加1

12.磁盘分区观察

lsblk 列出存储设备

        -d 仅列出磁盘本身,不会列出磁盘的分区数据

        -f 同时列出该磁盘内的文件系统名称

        -i 使用ASCII字符输出

        -m 同时输出设备在/dev 下的rwx信息

        -p 列出设备的完整文件名

        -t 列出该磁盘设备的详细数据,包括磁盘阵列机制、欲读写数据量大小等

blkid 列出设备的UUID(lsblk -f 也可以)

parted devicename paint 查看磁盘相关信息

[root@zjwLinux tmp]# lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
nvme1n1     259:0    0 476.9G  0 disk 
├─nvme1n1p1 259:1    0   260M  0 part 
├─nvme1n1p2 259:2    0    16M  0 part 
├─nvme1n1p3 259:3    0   100G  0 part 
├─nvme1n1p4 259:4    0 375.7G  0 part 
└─nvme1n1p5 259:5    0  1000M  0 part 
nvme0n1     259:6    0 465.8G  0 disk 
├─nvme0n1p1 259:7    0    16M  0 part 
├─nvme0n1p2 259:8    0 215.7G  0 part 
├─nvme0n1p3 259:9    0     1G  0 part /boot
├─nvme0n1p4 259:10   0    16G  0 part [SWAP]
└─nvme0n1p5 259:11   0   233G  0 part /

 默认输出下会仅列出最后的名字,省略 /dev

MAJ:MIN:主要与次要设备代码,内核识别的设备通过这两个代码实现

RM:是否为可卸载设备如光盘、USB磁盘等

RO:是否为只读设备

TYPE:磁盘(disk)、分区(partition)、只读存储器(rom)等

13.磁盘分区(我的为gpt分区,所以使用gdisk)

切忌随便按 w

Command (? for help): p
Disk /dev/nvme0n1: 976773168 sectors, 465.8 GiB    //总扇区
Model: Samsung SSD 980 500GB                   
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): E73421BB-3890-4E5F-9001-BCA16B47B8F3
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 8-sector boundaries
Total free space is 15 sectors (7.5 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              34           32767   16.0 MiB    0C01  Microsoft reserved ...
   2           32768       452483071   215.7 GiB   0700  Basic data partition
   3       452483072       454580223   1024.0 MiB  EF00  
   4       454580224       488134655   16.0 GiB    8300  
   5       488134656       976773119   233.0 GiB   8300  
分区编号    开始扇区          结束扇区

由于我在分区时没有预留空间,导致无法进行新增分区操作,不过流程大致如此

首先新增分区命令为n,在command中键入n执行分区命令

Command (? for help): n
Partition number (6-128, default 6): 

分区编号,默认对应于原先磁盘分区

Command (? for help): n
Partition number (6-128, default 6): 
First sector (976773120-976773134, default = 976773120) or {+-}size{KMGTP}: 

开始扇区,默认为之前分区结束扇区+1

Command (? for help): n
Partition number (6-128, default 6): 
First sector (976773120-976773134, default = 976773120) or {+-}size{KMGTP}: 
Last sector (976773120-976773134, default = 976773127) or {+-}size{KMGTP}: 

结束扇区,不需要我们手动输入扇区号码,只需通过+-容量大小,系统自动帮我们计算扇区

Command (? for help): n
Partition number (6-128, default 6): 
First sector (976773120-976773134, default = 976773120) or {+-}size{KMGTP}: 
Last sector (976773120-976773134, default = 976773127) or {+-}size{KMGTP}: +1G
Last sector (976773120-976773134, default = 976773127) or {+-}size{KMGTP}: 

注意,当想要新增的容量大于剩余容量时,需要重新输入

Command (? for help): n
Partition number (6-128, default 6): 
First sector (976773120-976773134, default = 976773120) or {+-}size{KMGTP}: 
Last sector (976773120-976773134, default = 976773127) or {+-}size{KMGTP}: +1G
Last sector (976773120-976773134, default = 976773127) or {+-}size{KMGTP}: +1K
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 

选择文件系统,默认是linux文件系统的8300(swap为8200。回车即可完成创建

Command (? for help): p
Disk /dev/nvme0n1: 976773168 sectors, 465.8 GiB
Model: Samsung SSD 980 500GB                   
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): E73421BB-3890-4E5F-9001-BCA16B47B8F3
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 8-sector boundaries
Total free space is 13 sectors (6.5 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              34           32767   16.0 MiB    0C01  Microsoft reserved ...
   2           32768       452483071   215.7 GiB   0700  Basic data partition
   3       452483072       454580223   1024.0 MiB  EF00  
   4       454580224       488134655   16.0 GiB    8300  
   5       488134656       976773119   233.0 GiB   8300  
   6       976773120       976773121   1024 bytes  8300  Linux filesystem

查看一下新增分区 6

删除分区:在command行中输入p查看分区信息,利用命令d来删除对应编号的分区

MBR文件系统的fdisk与GPT类似

利用 partprobe 在不重启系统的情况下更新linux内核的分区信息

partprobe -s (不加 -s 则不会显示信息)

14.磁盘格式化(创建文件系统)

XFS文件系统格式化:

mkfs.xfs -b 接区块容量

                -d 接data section的相关参数值

                        agcount= 设置需要几个存储群组,通常与CPU个数相同

                                                (可用 grep 'processor' /proc/cpuinfo 查看CPU)

                        agsize= 每个存储群组容量,通常 agcount与agsize选一个就好

                        file 格式化的设备是个文件,而不是真正的设备,如虚拟磁盘

                        size= data section的容量

                        su= 当有RAID时,stripe的数值

                        sw= 当有RAID时,用于保存数据的磁盘数量(须扣除备份盘与备用盘)

                        sunit= 与与su一样,不过单位是几个sector

                        swidth= 就是su*sw,不过单位为几个sector

                -L 接文件系统的标头名称

                -r 指定realtime section的相关设置值

一般来说默认就行

ext4文件系统格式化:

mkfs.ext4 -b 设置区块大小

                  -L 接标头名

15.文件系统的检验

当文件系统发生错乱时,可通过文件系统的恢复命令来恢复

XFS文件系统

xfs_repair -f 后面的是文件而非实体设备

                  -n 单纯检查

                  -d 通常用在单人维护下,针对 / 进行检查与修复,不要随意使用

ext4文件系统

fsck.ext4 -p 文件修复过程中自动执行 yes

                -f 强制检查

                -D 针对文件系统下的目录进行最佳化配置

                -b 接备份的超级区块位置,可利用文件系统内备份的超级区块来尝试恢复损坏的超级区块

16.文件系统的挂载与卸载

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

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

              作为挂载点的目录理论上都应该是空白目录(若不是空白目录,挂载上去后,原内容将会暂时消失,并非覆盖,待文件系统卸载后内容将重现)

mount -a 按照 /etc/fstab 将所有未挂载的磁盘都挂载

                -l 增列Label名称 (执行了一下发现没有变化...)

                -t 接文件系统的种类来指定欲挂载类型如 xfs、ext系列等

                -n 默认情况下系统会将挂载信息及时写入 /etc/fstab ,此命令不会写入

                -o 接额外参数

                        async,sync 是否非同步写入,同步写入,默认async非同步

                        atime,noatime 是否修改文件读取时间

                        ro,rw 挂载为只读,可读写(若挂载为只读,即使文件系统文件有w都无法写)

                        auto,noauto 是否可以被自动挂载

                        dev,nodev 是否允许可以建立设备文件

                        suid,nosuid 是否允许含有 suid/sgid 的文件格式

                        exec,noexec 是否允许拥有可执行二进制文件

                        user,nouser 是否允许让任何user执行mount

                        defaults 默认值为 rw,suid,dev,exec,auto,nouser,async

                        remount 重新挂载,用于系统出错或更新参数

mount -n -o remount,rw /        用于进入单人维护模式后根目录只读挂载

mount -o loop 文件所在位置 挂载点        用于挂载特殊设备如iso等

挂载文件系统时可用设备文件名,也可用UUID(可用blkid查看)

mount 设备文件名(也可以 UUID="") 挂载点

光驱的挂载类似,一挂载就无法退出光盘,需要卸载(现在的电脑一般都没有光驱了)

USB挂载,如果是中文文件名,需要加上 -o codepage=950, iocharset=utf8(或者big5)

        950是中文语系的代码,iocharset为设置中文是utf-8编码还是Big5

当根目录出现只读状态时,则需要用到 mount -o remount,rw,auto /

可以利用 mount将一个目录暂时挂载到另外一个目录上,与符号链接的作用一样,但是有些程序运行不支持符号链接        mount --bind 源目录 目标目录

umount -f 强制卸载

                -l 立刻卸载,比 -f 还强

                -n 不更新 /etc/mtab 的情况下卸载

利用挂载点来卸载 umount /data/var

17,自定义硬盘/文件系统参数

mknod 设备文件名 b [Major] [Minor]

                                 设置设备名称成为一个外接存储设备文件

                                 c 设置设备名称成为一个外接输入设备文件

                                 p 成为一个FIFO文件

Major为主要设备代码 Minor为次要设备代码

首先需要用 ls -l 查看设备代码,建立设备文件时要正确设置设备代码

利用 xfs_admin 修改XFS文件系统的UUID与标头

xfs_admin -lu 设备文件名

        列出标头与UUID

                   -L 标头 设备文件名

                   -U UUID 设备文件名

        设置标头与UUID

利用uuidgen 可自动产生一个 UUID

可通过 mount LABEL=或UUID= 挂载点        来挂载

利用 tune2fs 修改 ext4的标头与UUID

tune2fs -L(-U)

                -l 类似dumpe2fs -h的功能

18.挂载(设置为自动挂载)

挂载的一些限制:首先根目录一定要第一个挂载(对应于安装linux时,所有磁盘分区都格式化后,先挂载根目录分区到 /mnt,然后再在/mnt中创建其他目录作为挂载点挂载其他分区);所有挂载点与硬盘分区在同一时间内只能挂载一次;卸载前必须将工作目录移出挂载点

将文件系统设置为开机自动挂载,则要在 /etc/fstab 中配置

UUID=""        挂载点        文件系统       文件系统参数(默认)        dump(0)        fsck(0)

设置完后,一定要 mount -a 一下,看看是否挂载成功

若分区太大,可以建立大文件格式化并挂载成为另一个分区,就跟windows的磁盘分区一样

以鸟哥的例子来看,在 /srv/loopdev 建立一个空的文件

dd if=/dev/zero of=/srv/loopdev bs=1M count=512

if为 input file,of为output file,bs为block size,count为block的个数

建立完后,格式化,mount -o loop 挂载。若想开机自动挂载则再写入 /etc/fstab (写入时用文件名,系统查询时仅会查询区块设备)

19.创建内存交换分区

使用物理分区创建:

与正常分区流程一样

gdisk 磁盘

mkswap 设备文件名

swapon 设备文件名

使用大文件创建:

在/tmp中创建一个 128MB的文件

dd if=/dev/zero of=/tmp/swap bs=1M count=128

mkswap ...

swapon ...

创建完交换分区后可以用 free [-h] 查看内存使用情况,或者 swapon -s 查看

卸载交换分区挂载的操作为 swapoff

注意,用大文件的方式创建交换分区时,写入 /etc/fstab时不可用UUID

20.磁盘空间的浪费

ls 命令查看到的第一行的 total 即为消耗总容量(该目录下所有数据消耗的实际区块数量*区块大小),大部分情况下目录下数据容量总和应该小于total的量(total统计的是该目录下所有文件的占用量)

21.利用parted 分区

虽然GPT用gdisk,MBR用fdisk,但是当需要用到脚本文件进行全部分区时,就需要用到parted!

parted 设备 命令 参数

  新增分区:mkpart [primary|logical|Extended] [ext4|xfs|vfat] 开始容量 结束容量

  显示分区:print

  删除分区:rm [partition]

具体命令可以键入 parted 进入命令行,输入help查看

首先可用 parted 设备 print 查看磁盘信息,与gdisk或fdisk类似

(鸟哥的例子)例如在 /dev/vda下分出一个 512MB容量的分区

parted /dev/vda mkpart primary fat32 36.0GB 36.5GB

从36G到36.5G正好512M

格式化为vfat

mkfs -t vfat /dev/vda7 或者 mkfs.vfat /dev/vda7

暂挂于 /data/win

mount /dev/vda7 /data/win

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值