刘刚刚的个人博客

<linux就该这么学>第六章 存储结构与磁盘划分

创建时间:2021-02-10 00:09:41
更新时间:2021-02-10 00:09:41

了解磁盘如何使用

linux的目录划分

image-20210202223656688

bin目录中都为二进制相关的执行文件

/opt、/usr/local 都是安装第三方软件

/media、/mnt 可以用来挂载目录

/tmp 为用户使用的共享文件夹,/var/tmp为系统使用

目录名称应放置文件的内容
/root系统管理员的家目录
/bin存放单用户模式下还可以操作的命令(开机时不需要)
/boot开机所需文件—内核、开机菜单以及所需配置文件等(开机驱动、引导文件)
/dev以文件形式存放任何设备与接口
/etc配置文件
/home用户主目录
/lib开机时用到的函数库,以及/bin与/sbin下面的命令要调用的函数
/sbin开机过程中需要的命令
/media用于挂载设备文件的目录(光盘、硬盘、网络存储)
/opt放置第三方的软件
/srv一些网络服务的数据文件目录
/tmp任何人均可使用的“共享”临时目录
/proc虚拟文件系统,例如系统内核、进程、外部设备及网络状态等(里面的文件不是真实的文件,是设备映射的文件)
/usr/local用户自行安装的软件
/usr/sbinLinux系统开机时不会使用到的软件/命令/脚本
/usr/share帮助与说明文件,也可放置共享文件
/var主要存放经常变化的文件,(日志、网络、数据库)
/lost+found当文件系统发生错误时,将一些丢失的文件片段存放在这里(异常断电、宕机的一些文件可能在此找到)

image-20210202230150420

物理设备的命名规则

硬件设备文件名称
IDE设备(几乎没有了)/dev/hd[a-d]
SCSI/SATA/U盘/dev/sd[a-z]
virtio设备/dev/vd[a-z]
软驱/dev/fd[0-1]
打印机/dev/lp[0-15]
光驱/dev/cdrom
鼠标/dev/mouse
磁带机/dev/st0或/dev/ht0

硬盘的命名规则

内核识别主板的硬盘插槽时,是从第一个插槽处开始识别的。

# 规则
/dev/sd{系统内核识别到第n个的插槽处的硬盘}{分区的标号}
# 例子
/dev/sda5

硬盘的分区:

image-20210202233113350

硬盘的第一个扇区保存着主引导记录和分区表信息,但分区表信息只能存储4个,因此如果需要分4个以上的分区,需要将第4个作为一个逻辑分区,用来存储其他的分区信息。

文件系统与数据资料

用户在硬件存储中执行的文件建立、写入、读取、修改、转存与控制等操作都是依靠文件系统来完成的,常见的文件系统包括:

  1. Ext3:日志文件系统,能够在系统异常宕机时,避免文件系统资料的丢失(不能100%保证),会将硬盘的每个写入动作都记录下来,当系统宕机时通过回溯到中断的部分来进行恢复。
  2. Ext4:改进了Ext3,支持无限的子目录,能够批量分配block块,从而极大的提高了读写效率。
  3. XFS:高性能日志文件系统,是RHEL78默认的文件管理系统,在宕机后可以快速的恢复。

在linux中存在一个硬盘地图,文件的信息都存储在‘硬盘地图’中,里面记录着文件系统的信息。文件的权限和属性记录在inode中,而文件的实际内容存储在block中。在inode中存在以下信息:

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

在我们对不同文件系统 的文件进行操作时,不需要关心底层,是因为linux中为用户提供了一个VFS,让用户对底层没有感觉。

img

硬件设备的挂载

挂载时,可以使用mount命令或者编辑/etc/fstab文件,使用mout命令只能临时挂载。挂载前需要进行格式化(下边讲解)

# 临时挂载硬盘到目录
mount {硬盘} {挂载到的目录}
# 卸载
umount {硬盘|目录}


# 例:
mount /dev/sdb2 /backup
umount /dev/sdb2
参数作用
-a挂载所有在/etc/fstab中定义的文件系统,编辑fatab文件后,可以使用此命令挂载,或者开机时自动挂载,如果开机后,未修改文件的内容,则该命令不会生效。
-t指定文件系统的类型(不需要加,系统会自动判断)
# /etc/fstab文件的格式
{设备文件} {挂载的目录} {格式类型} {权限} {是否备份} {是否自检} 


字段意义
设备文件一般为设备的路径+设备名称,也可以写唯一识别码(UUID,Universally Unique Identifier)
挂载目录指定要挂载到的目录,需在挂载前创建好
格式类型指定文件系统的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此为光盘设备)等
权限选项若设置为defaults,则默认权限为:rw, suid, dev, exec, auto, nouser, async
是否备份若为1则开机后使用dump进行磁盘备份,为0则不备份
是否自检若为1则开机后自动进行磁盘自检,为0则不自检

在rhel7开始,任何一个硬盘有错误都没法启动

如果允许自检,自检没通过时,会不能开机,一般用于网络设备

安装硬盘后,可以使用lsblk看硬盘编号

mkfs. 加两个table可以看到能被格式化的格式,

添加硬盘设备

添加硬盘设备并挂载的两种方法:

  1. 分区->格式化->挂载
  2. 格式化->挂载

fdisk分区

当新添加一块硬盘设备时,我们可以进行协助分区。

# 分区
fdisk

# 格式化分区
mkfs.{格式} 设备

# 查看设备信息
lsblk

# 查看硬盘占用
df -h


>>>
# 因为创建虚拟机的时候第一块硬盘使用的是时nvme,此处添加的硬盘为scic所有新添加的硬盘为sda
[root@linuxprobe /]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0   20G  0 disk 
sr0            11:0    1 1024M  0 rom  
nvme0n1       259:0    0   20G  0 disk 
├─nvme0n1p1   259:1    0    1G  0 part /boot
└─nvme0n1p2   259:2    0   19G  0 part 
  ├─rhel-root 253:0    0   17G  0 lvm  /
  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
[root@linuxprobe /]# fdisk /dev/sda

Welcome to fdisk (util-linux 2.32.1).
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.
Created a new DOS disklabel with disk identifier 0xe27b2145.
# 使用n命令,来新建分区
Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
# 使用p命令来创建主分区
Select (default p): p
# 指定分区的编号
Partition number (1-4, default 1): 1
# 硬盘从2048开始
First sector (2048-41943039, default 2048): 
# 指定2G的大小
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039): +2G

Created a new partition 1 of type 'Linux' and of size 2 GiB.
# 保存分区
Command (m for help): w

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

[root@linuxprobe /]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0   20G  0 disk 
└─sda1          8:1    0    2G  0 part 
sr0            11:0    1 1024M  0 rom  
nvme0n1       259:0    0   20G  0 disk 
├─nvme0n1p1   259:1    0    1G  0 part /boot
└─nvme0n1p2   259:2    0   19G  0 part 
  ├─rhel-root 253:0    0   17G  0 lvm  /
  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
# 按两次tab可以查看,可选的格式
[root@linuxprobe /]# mkfs
mkfs         mkfs.ext2    mkfs.ext4    mkfs.minix   mkfs.vfat    
mkfs.cramfs  mkfs.ext3    mkfs.fat     mkfs.msdos   mkfs.xfs       
[root@linuxprobe /]# mkfs.xfs /dev/sda1
meta-data=/dev/sda1              isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
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@linuxprobe /]# mkdir /mysda1
[root@linuxprobe /]# mount /dev/sda1 /mysda1
[root@linuxprobe /]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               969M     0  969M   0% /dev
tmpfs                  984M     0  984M   0% /dev/shm
tmpfs                  984M  9.6M  974M   1% /run
tmpfs                  984M     0  984M   0% /sys/fs/cgroup
/dev/mapper/rhel-root   17G  3.9G   14G  23% /
/dev/nvme0n1p1        1014M  152M  863M  15% /boot
tmpfs                  197M   16K  197M   1% /run/user/42
tmpfs                  197M  3.5M  194M   2% /run/user/0
/dev/sda1              2.0G   47M  2.0G   3% /mysda1

[root@linuxprobe /]# vim /etc/fstab
# 文件末尾写入以下内容
/dev/sda1 /mysda1 xfs defaults 0 0
# 检查文件格式是否正确
[root@linuxprobe /]# mount -a

常用的一些参数:

参数作用
m查看全部可用的参数
n添加新的分区
d删除某个分区信息
l列出所有可用的分区类型
t改变某个分区的类型
p查看分区表信息
w保存并退出
q不保存直接退出

du

查看目录中文件占用空间的大小。

[root@linuxprobe /]# du  -sh  /root
8.5M    /root

添加交换分区

交换分区的大小一般建议为物理内存的1.5-2倍。需要先分区,让后使用格式化交换分区命令,并写入/etc/fstab文件

# 将磁盘格式化为
mkswap {磁盘分区}

# 文件格式
/dev/sda2 swap swap defaults 0 0

# 删除分区

# 查看内存占用
free -m 

# 同步分区信息
partprobe 


>>>
# 分区
[root@linuxprobe /]# fdisk /dev/sda
Welcome to fdisk (util-linux 2.32.1).
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 (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (4196352-41943039, default 4196352): 
Last sector, +sectors or +size{K,M,G,T,P} (4196352-41943039, default 41943039): +3G
Created a new partition 2 of type 'Linux' and of size 3 GiB.
Command (m for help): p
Disk /dev/sda: 20 GiB, 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
Disklabel type: dos
Disk identifier: 0xe27b2145
Device     Boot   Start      End Sectors Size Id Type
/dev/sda1          2048  4196351 4194304   2G 83 Linux
/dev/sda2       4196352 10487807 6291456   3G 83 Linux

Command (m for help): m

Help:

  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition
   F   list free unpartitioned space
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table
   i   print information about a partition

  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)

  Script
   I   load disk layout from sfdisk script file
   O   dump disk layout to sfdisk script file

  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table


Command (m for help): w
The partition table has been altered.
Syncing disks.


# 格式化
[root@linuxprobe /]# mkswap /dev/sda2
Setting up swapspace version 1, size = 3 GiB (3221221376 bytes)
no label, UUID=fffdecbf-5cee-4f19-a2d1-5ed5118d71f3
# 写入文件
[root@linuxprobe /]# vim /etc/fstab
# 写入以下内容
/dev/sda2 swap swap defaults 0 0
[root@linuxprobe /]# mount -a

磁盘容量配额

可以用来限制用户占用的文件夹最大的容量或者文件数量。限制包括两种:

  • 软限制:当达到软限制时,会提示用户,但仍然允许用户使用
  • 硬限制:当达到硬限制时,会提示用户,强行终止用户的操作

流程:为磁盘增加容量配额的支持 -> 配置用户容量

参数意义
bsoft硬盘软限制
bhard硬盘硬限制
isoft文件数量软限制
ihard文件数量硬限制
# 设置硬盘支持容量配额
/dev/sda1 /mysda1 xfs defaults,uquota 0 0

# 使用xfs_quota命令设置限制,-x 代表专家模式,-c 代表使用参数的形式设置限制
xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 tom' {目录}

# 查看限制
xfs_quota -x -c report {目录}

# 修改或者查看配额
edquota -u {用户名}

>>>
[root@linuxprobe /]# mount | grep sda1
/dev/sda1 on /mysda1 type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
[root@linuxprobe /]# vim /etc/fstab
# 加uquota
/dev/sda1 /mysda1 xfs defaults,uquota 0 0
[root@linuxprobe /]# reboot
[root@linuxprobe ~]# mount | grep sda1
/dev/sda1 on /mysda1 type xfs (rw,relatime,seclabel,attr2,inode64,usrquota)
[root@linuxprobe ~]# useradd tom
[root@linuxprobe ~]# xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 tom' /mysda1
[root@linuxprobe ~]# xfs_quota -x -c report /mysda1
User quota on /mysda1 (/dev/sda1)
                               Blocks                     
User ID          Used       Soft       Hard    Warn/Grace     
---------- -------------------------------------------------- 
root                0          0          0     00 [--------]
tom                 0       3072       6144     00 [--------]

[root@linuxprobe ~]# chmod -Rf 777 /mysda1
[root@linuxprobe ~]# su - tom
[tom@linuxprobe ~]$ dd if=/dev/zero of=/mysda1/tom bs=5M  count=1
1+0 records in
1+0 records out
5242880 bytes (5.2 MB, 5.0 MiB) copied, 0.00694646 s, 755 MB/s
[tom@linuxprobe ~]$ dd if=/dev/zero of=/mysda1/tom bs=10M  count=1
# 此处会报错
dd: error writing '/mysda1/tom': Disk quota exceeded
1+0 records in
0+0 records out
4194304 bytes (4.2 MB, 4.0 MiB) copied, 0.00848284 s, 494 MB/s


# 编辑配额
[root@linuxprobe ~]# edquota -u tom
# 会显示以下内容,可以进行编辑
Disk quotas for user tom (uid 1002):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda1                      5120       3072       6144          1        3        6
tip:

ext4不能进行容量的配额

软硬链接

可以使用ln命令来创建文件的链接,包括两种:

  • 硬链接:每创建一个链接会对原文件增加一个引用计数inode,只有inode为0的时候,文件才会被删除。
  • 软链接:创建一个指向原文件的链接,如果原文件被删除,则软链接不能正常使用
# 创建硬链接
ln  {原文件} {链接名}

# 创建软链接
ln -s  {原文件} {链接名}

>>>
[root@linuxprobe ~]# echo 'nihao!' > readme.txt
[root@linuxprobe ~]# ll readme.txt
-rw-r--r--. 1 root root 7 Feb 10 07:50 readme.txt
[root@linuxprobe ~]# ln readme.txt readme.hard
[root@linuxprobe ~]# ll readme.txt
-rw-r--r--. 2 root root 7 Feb 10 07:50 readme.txt
[root@linuxprobe ~]# ln -s readme.txt readme.soft
[root@linuxprobe ~]# ln -s readme.txt readme.soft
ln: failed to create symbolic link 'readme.soft': File exists
[root@linuxprobe ~]# ln -si readme.txt readme.soft
ln: replace 'readme.soft'? y
[root@linuxprobe ~]# cat readme.soft
nihao!
[root@linuxprobe ~]# cat readme.hard
nihao!
参数作用
-s创建“符号链接”(如果不带-s参数,则默认创建硬链接)
-f强制创建文件或目录的链接
-i覆盖前先询问
-v显示创建链接的过程
我的名片

昵称:shuta

职业:后台开发(python、php)

邮箱:648949076@qq.com

站点信息

建站时间: 2020/2/19
网站程序: ANTD PRO VUE + TP6.0
晋ICP备18007778号