Linux就该这么学 20181003(第六章磁盘管理)

Posted 想翻身的猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux就该这么学 20181003(第六章磁盘管理)相关的知识,希望对你有一定的参考价值。

参考链接https://www.linuxprobe.com/ 

/boot    开机锁需要文件-内核、开机菜单以及所需配置文件
/dev    以文件形式存放的任何设备与接口
/etc    配置文件
/home    用户主目录
/bin    存放单用户模式下还可以操作的命令
/lib    开机用到的函数库,以及/bin与/sbin的命令要调用的函数
/sbin    开机过程中需要的命令
/media    用于挂载设备文件的目录
/opt    放置第三方的软件
/root    系统管理员家目录
/srv    一些网络服务的数据文件目录
/tmp    任何人均可共同使用的临时目录
/proc    虚拟文件系统,例如系统内核,进程,外部设备以及网络状态
/usr/local    用户自行安装的软件
/usr/sbin    Linux系统开机时不会使用到的软件、命令、脚本
/usr/share    帮助与说明文件,也可放置共享文件
/var    主要存放经常变化的文件,如日志
/lost+found    当文件系统发生错误时,将一些丢失的文件片段存放在这里

udev设备管理器的服务会一直以守护进程的形式运行并侦听内核发出的信号来管理/dev目录下的设备文件


常见的硬件设备及文件名称
硬件设备    文件名称
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/ht0

PS:/dev/sda 中的a不是由卡槽决定,而是由系统内核的识别顺序来决定
PS: 分区的编号不代表分区的个数,如sda3 只能判断编号为3的分区,而不能判断sda设备以已经存在3个分区

/dev/sda5
硬件设备文件所在目录  hd表示IDE设备 sd表示SCSI设备  a表示磁盘的顺序号, 5表示分区的顺序号
因此,这是系统中第一块被识别到硬件设备中分区编号为5的逻辑分区的设备文件

/dev/hdc8
这是第三块IDE设备中编号为8的逻辑分区

分区方法(3个主分区,一个扩展分区,然后再扩展分区创建数个逻辑分区)以满足多个分区(大于4个)的需求

文件系统和数据资料
文件系统:
Ext3    日志文件系统
Ext4 Ext3的改进 作为RHEL6默认的文件管理系统 另外,Ext4文件系统能够批量分配block块,从而极大地提高了读写效率。
XFS:是一种高性能的日志文件系统,而且是RHEL 7中默认的文件管理系统,它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能

被破坏的文件,而且强大的日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为18EB,这几乎满足了所有需求。
因此XFS文件系统最卓越的亮点应该当属可支持高达18EB的存储容量吧。

文件信息
该文件的访问权限(read、write、execute);

该文件的所有者与所属组(owner、group);

该文件的大小(size);

该文件的创建或内容修改时间(ctime);

该文件的最后一次访问时间(atime);

该文件的修改时间(mtime);

文件的特殊权限(SUID、SGID、SBIT);

该文件的真实数据地址(point)。

为了使用户在读取或写入文件时不用关心底层的硬盘结构,linux内核中的软件层为用户程序提供了VFS(虚拟文件系统)接口

挂载硬件设备

挂载,当用户需要使用硬盘设备或分区中的数据,需要先将其与一个已存在的目录文件进行关联

mount 挂载系统文件
mount 文件系统 挂载目录
对于比较新的linux系统,一般不需要使用-t参数来指定文件系统类型,linux系统会自动识别

mount -a参数则会挂载所有在/etc/fstab中定义的文件系统

例如,要把设备/dev/sdb2挂载到/backup目录,只需要在mount命令中填写设备与挂载目录参数就行,系统会自动去判断要挂载文件的类型

,因此只需要执行下述命令即可:
#mkdir -p /backup
#mount /dev/sdb2  /backup

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

#vim /etc/fstab
/dev/cdrom /media/cdrom iso9660 defaults 0 0 

umount 移除挂载
umount /dev/sdb2  

添加硬盘设备,然后进行分区,格式化,挂载,最后通过检查系统的挂载状态并真实的使用硬盘来验证硬盘设备是否添加成功


fdisk命令 管理硬盘设备最常用的方法
m    查看全部可用的桉树
n    添加新的分区
d    删除某个分区信息
l    列出所有可用的分区类型
t    改变某个分区的类型
p    查看分区表信息
w    保存并退出
q    不保存直接退出

ps:可以输入partprobe命令手动将分区信息同步到内核,而且一般推荐连续两次执行该命令,效果会更好。如果使用这个命令都无法解决

问题,那么就重启计算机吧,这个杀手锏百试百灵,一定会有用的。


第1步:我们首先使用fdisk命令来尝试管理/dev/sdb硬盘设备。在看到提示信息后输入参数p来查看硬盘设备内已有的分区信息,其中包括

了硬盘的容量大小、扇区个数等信息:

[[email protected] ~]# fdisk /dev/sdb
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 0x47d24a34.
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: 0x47d24a34
Device Boot Start End Blocks Id System
第2步:输入参数n尝试添加新的分区。系统会要求您是选择继续输入参数p来创建主分区,还是输入参数e来创建扩展分区。这里输入参数p

来创建一个主分区:

Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
第3步:在确认创建一个主分区后,系统要求您先输入主分区的编号。我们在前文得知,主分区的编号范围是1~4,因此这里输入默认的1

就可以了。接下来系统会提示定义起始的扇区位置,这不需要改动,我们敲击回车键保留默认设置即可,系统会自动计算出最靠前的空闲

扇区的位置。最后,系统会要求定义分区的结束扇区位置,这其实就是要去定义整个分区的大小是多少。我们不用去计算扇区的个数,只

需要输入+2G即可创建出一个容量为2GB的硬盘分区。

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): +2G
Partition 1 of type Linux and of size 2 GiB is set
第4步:再次使用参数p来查看硬盘设备中的分区信息。果然就能看到一个名称为/dev/sdb1、起始扇区位置为2048、结束扇区位置为

4196351的主分区了。这时候千万不要直接关闭窗口,而应该敲击参数w后回车,这样分区信息才是真正的写入成功啦。

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: 0x47d24a34
Device Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
第5步:在上述步骤执行完毕之后,Linux系统会自动把这个硬盘主分区抽象成/dev/sdb1设备文件。我们可以使用file命令查看该文件的属

性,但是刘遄老师在讲课和工作中发现,有些时候系统并没有自动把分区信息同步给Linux内核,而且这种情况似乎还比较常见(但不能算

作是严重的bug)。我们可以输入partprobe命令手动将分区信息同步到内核,而且一般推荐连续两次执行该命令,效果会更好。如果使用

这个命令都无法解决问题,那么就重启计算机吧,这个杀手锏百试百灵,一定会有用的。

[[email protected] ]# file /dev/sdb1
/dev/sdb1: cannot open (No such file or directory)
[[email protected] ]# partprobe
[[email protected] ]# partprobe
[[email protected] ]# file /dev/sdb1
/dev/sdb1: block special
如果硬件存储设备没有进行格式化,则Linux系统无法得知怎么在其上写入数据。因此,在对存储设备进行分区后还需要进行格式化操作。

在Linux系统中用于格式化操作的命令是mkfs。这条命令很有意思,因为在Shell终端中输入mkfs名后再敲击两下用于补齐命令的Tab键,会

有如下所示的效果:

[[email protected] ~]# mkfs
mkfs mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs
mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat
对!这个mkfs命令很贴心地把常用的文件系统名称用后缀的方式保存成了多个命令文件,用起来也非常简单—mkfs.文件类型名称。例如要

格式分区为XFS的文件系统,则命令应为mkfs.xfs /dev/sdb1。

[[email protected] ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=256 agcount=4, agsize=131072 blks
 = sectsz=512 attr=2, projid32bit=1
 = crc=0
data = bsize=4096 blocks=524288, 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
终于完成了存储设备的分区和格式化操作,接下来就是要来挂载并使用存储设备了。与之相关的步骤也非常简单:首先是创建一个用于挂

载设备的挂载点目录;然后使用mount命令将存储设备与挂载点进行关联;最后使用df -h命令来查看挂载状态和硬盘使用量信息。

[[email protected] ~]# mkdir /newFS
[[email protected] ~]# mount /dev/sdb1 /newFS/
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 18G 3.5G 15G 20% /
devtmpfs 905M 0 905M 0% /dev
tmpfs 914M 140K 914M 1% /dev/shm
tmpfs 914M 8.8M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/sr0 3.5G 3.5G 0 100% /media/cdrom
/dev/sda1 497M 119M 379M 24% /boot
/dev/sdb1 2.0G 33M 2.0G 2% /newFS
2.  du命令

既然存储设备已经顺利挂载,接下来就可以尝试通过挂载点目录向存储设备中写入文件了。在写入文件之前,先介绍一个用于查看文件数

据占用量的du命令,其格式为“du [选项] [文件]”。简单来说,该命令就是用来查看一个或多个文件占用了多大的硬盘空间。我们还可

以使用du -sh /*命令来查看在Linux系统根目录下所有一级目录分别占用的空间大小。下面,我们先从某些目录中复制过来一批文件,然

后查看这些文件总共占用了多大的容量:

[[email protected] ~]# cp -rf /etc/* /newFS/
[[email protected] ~]# ls /newFS/
abrt hosts pulse
adjtime hosts.allow purple
aliases hosts.deny qemu-ga
aliases.db hp qemu-kvm
alsa idmapd.conf radvd.conf
alternatives init.d rc0.d
anacrontab inittab rc1.d
………………省略部分输入信息………………
[[email protected] ~]# du -sh /newFS/
33M /newFS/
细心的读者一定还记得,前面在讲解mount命令时提到,使用mount命令挂载的设备文件会在系统下一次重启的时候失效。如果想让这个设

备文件的挂载永久有效,则需要把挂载的信息写入到配置文件中:

[[email protected] ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed May 4 19:26:23 2017
#
# 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=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0 
/dev/sdb1 /newFS xfs defaults 0 0


添加交换分区
一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服

务来使用的技术,目的是解决真实物理内存不足的问题 只有当真实的物理内存消耗完毕后才会调用交换分区的资源

在生产环境中,交换分区大小一般为真实物理机内存的1.5-2倍 
取出一个大小为5G的主分区作为交换分区资源

#添加交换分区步骤
[[email protected] ~]# fdisk /dev/sdb
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 0xb3d27ce1.
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extendedSelect (default p): p
Partition number (2-4, default 2): 
First sector (4196352-41943039, default 4196352): 此处敲击回车
Using default value 4196352
Last sector, +sectors or +size{K,M,G} (4196352-41943039, default 41943039): +5G
Partition 2 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: 0xb0ced57f
 Device Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 14682111 5242880 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.
使用SWAP分区专用的格式化命令mkswap,对新建的主分区进行格式化操作:

[[email protected] ~]# mkswap /dev/sdb2
Setting up swapspace version 1, size = 5242876 KiB
no label, UUID=2972f9cb-17f0-4113-84c6-c64b97c40c75
使用swapon命令把准备好的SWAP分区设备正式挂载到系统中。我们可以使用free -m命令查看交换分区的大小变化(由2047MB增加到7167MB

)

[[email protected] ~]# free -m
total used free shared buffers cached
Mem: 1483 782 701 9 0 254
-/+ buffers/cache: 526 957
Swap: 2047 0 2047
[[email protected] ~]# swapon /dev/sdb2
[[email protected] ~]# free -m
total used free shared buffers cached
Mem: 1483 785 697 9 0 254
-/+ buffers/cache: 530 953
Swap: 7167 0 7167
为了能够让新的交换分区设备在重启后依然生效,需要按照下面的格式将相关信息写入到配置文件中,并记得保存:

[[email protected] ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed May 4 19:26:23 2017
#
# 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=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0 
/dev/sdb1 /newFS xfs defaults 0 0 
/dev/sdb2 swap swap defaults 0 0 


磁盘容量配额
使用quota命令进行磁盘容量配额管理,从而限制用户的硬盘可用容量或所能创建的最大文件个数
quota命令还有软限制和硬限制的功能
软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用
硬限制:当达到硬限制时会提示用户,且强制终止用户的操作

RHEL7系统已安装了quota磁盘容量匹配服务程序包,但存储设备默认没有开启对quota支持

RHEL7系统使用uquota参数,在重启系统使用Mount命令查看,即可发现/boot目录已经支持quota磁盘技术

[[email protected] ~]# reboot
[[email protected] ~]# mount | grep boot
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,usrquota)

接下来创建一个用于检查quota磁盘容量配额效果的用户tom,并针对/boot目录增加其他人的写权限,保证用户能够正常写入数据:

[[email protected] ~]# useradd tom
[[email protected] ~]# chmod -Rf o+w /boot

1.  xfs_quota命令

xfs_quota命令是一个专门针对XFS文件系统来管理quota磁盘容量配额服务而设计的命令,格式为“xfs_quota [参数] 配额 文件系统”。

其中,-c参数用于以参数的形式设置要执行的命令;-x参数是专家模式,让运维人员能够对quota服务进行更多复杂的配置。接下来我们使

用xfs_quota命令来设置用户tom对/boot目录的quota磁盘容量配额。具体的限额控制包括:硬盘使用量的软限制和硬限制分别为3MB和6MB

;创建文件数量的软限制和硬限制分别为3个和6个。

[[email protected] ~]# xfs_quota -x -c ‘limit bsoft=3m bhard=6m isoft=3 ihard=6 tom‘ /boot
[[email protected] ~]# xfs_quota -x -c report /boot
User quota on /boot (/dev/sda1)   Blocks
User ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 95084 0 0 00 [--------]
tom 0 3072 6144 00 [--------]
当配置好上述的各种软硬限制后,尝试切换到这个普通用户,然后分别尝试创建一个体积为5MB和8MB的文件。可以发现,在创建8MB的文件

时受到了系统限制:

[[email protected] ~]# su - tom
[[email protected] ~]$ dd if=/dev/zero of=/boot/tom bs=5M count=1
1+0 records in
1+0 records out
5242880 bytes (5.2 MB) copied, 0.123966 s, 42.3 MB/s
[[email protected] ~]$ dd if=/dev/zero of=/boot/tom bs=8M count=1
dd: error writing ‘/boot/tom’: Disk quota exceeded
1+0 records in
0+0 records out
6291456 bytes (6.3 MB) copied, 0.0201593 s, 312 MB/s


2.  edquota命令

edquota命令用于编辑用户的quota配额限制,格式为“edquota [参数] [用户] ”。在为用户设置了quota磁盘容量配额限制后,可以使用

edquota命令按需修改限额的数值。其中,-u参数表示要针对哪个用户进行设置;-g参数表示要针对哪个用户组进行设置。edquota命令会

调用Vi或Vim编辑器来让root管理员修改要限制的具体细节。下面把用户tom的硬盘使用量的硬限额从5MB提升到8MB:

[[email protected] ~]# edquota -u tom
Disk quotas for user tom (uid 1001):
 Filesystem blocks soft hard inodes soft hard
 /dev/sda1 6144 3072 8192 1 3 6
[[email protected] ~]# su - tom
Last login: Mon Sep 7 16:43:12 CST 2017 on pts/0
[[email protected] ~]$ dd if=/dev/zero of=/boot/tom bs=8M count=1
1+0 records in
1+0 records out
8388608 bytes (8.4 MB) copied, 0.0268044 s, 313 MB/s
[[email protected] ~]$ dd if=/dev/zero of=/boot/tom bs=10M count=1
dd: error writing ‘/boot/tom’: Disk quota exceeded
1+0 records in
0+0 records out
8388608 bytes (8.4 MB) copied, 0.167529 s, 50.1 MB/s


硬链接(hard link):可以将它理解为一个“指向原始文件inode的指针”,系统不为它分配独立的inode和文件。所以,硬链接文件与原

始文件其实是同一个文件,只是名字不同.由于硬链接实际上是指向原文件inode的指针,因此即便原始文件被删除,依然可以通过硬链接

文件来访问。需要注意的是,由于技术的局限性,我们不能跨分区对目录文件进行链接。

软链接(也称为符号链接[symbolic link]):仅仅包含所链接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行链接。但是

,当原始文件被删除后,链接文件也将失效,从这一点上来说与Windows系统中的“快捷方式”具有一样的性质。
删除了主文件,软连接文件就无法访问


ln
-s    创建符号(软)链接(如果不带-s,默认创建硬链接)
-f    强制创建文件或目录的链接
-i    覆盖前先询问
-v    显示创建连接的过程

ln -s 源文件 目标文件  (软链接) 删除原文件后无法访问
ln 源文件  目标文件    (硬链接) 删除原文件后可以继续访问 inode指针会加1

1./dev/sdb 不能确定它是主板的第二个插槽,因为设备的文件名由系统的识别顺序来决定
2.硬盘中5个分区,至少需要几个逻辑分区? 三个主分区,一个扩展分区分为两个逻辑分区
3./dev/sda5 为逻辑分区
4.udev设备管理器服务决定了设备在dev目录中的名称
5.挂载时,当用户需要使用硬盘设备或分区中的数量,需要先将其与一个已存在的目录文件进行关联,这个关联动作称为挂载
6.在配置quota磁盘容量配额服务,软限制数值必须要小于硬限制数值? 不一定
7.若原始文件被改名了,那么之前创建的硬链接还能访问到这个原始文件吗? 可以

 

以上是关于Linux就该这么学 20181003(第六章磁盘管理)的主要内容,如果未能解决你的问题,请参考以下文章

Linux就该这么学 20181003(第四章Vim/shell/测试条件)

《Linux就该这么学》第六课

《Linux就该这么学》第六课

linux就该这么学 第九课

Linux就该这么学 20181005(第七章磁盘管理)

20191209 Linux就该这么学