24.1 Linux支持的文件系统
1、文件操作:
打开,关闭,创建,删除,修改
2、文件系统类型(Linux几乎全部支持)
FAT32,NTFS,ISO9660,CIFS,ext2(CentOS5),ext3(CentOS5,6),ext4(CentOS6,7),xfs(CentOS7),btrfs(CentOS7),reiserfs,jfs,nfs,ocfs2,gfs2
swap:交换分区(可以将硬盘当做内存用的部分,将一些不常用的进程放于swap当中)
数据库:swap可以分配小一点(512M,1G左右)
hadoop:swap可以分配大一点(8G甚至以上,太大影响系统速度)
光盘:iso9660
Windows:fat32,NTFS
UNIX:FFS,UFS,JFS2
网络文件系统:NFS,CIFS
集群文件系统:GFS2,OCFS2
分布式文件系统:ceph
moosefs,mogilefs,GlusterFS,Lustre
根据其是否支持“journal”功能:
日志文件系统(有日志区域):ext3,ext4,xfs,…
非日志型文件系统(无日志区域):ext2,vfat
3、文件系统的组成部分:
内核中的模块:ext4,xfs,vfat
用户空间的管理工具:mkfs.ext2,mkfs.ext4,mkfs.vffat(FAT32)
4、Linux VFS:Virtual File System(虚拟文件系统):
用来统一各种文件系统,为开发者提供一个标准的文件接口,所以Linux支持众多的文件系统

查看linux支持的文件系统:
[root@localhost ~]# cat /proc/filesystems
nodev sysfs
nodev rootfs
nodev ramfs
nodev bdev
nodev proc
nodev cgroup
nodev cpuset
nodev tmpfs
nodev devtmpfs
nodev debugfs
nodev securityfs
nodev sockfs
nodev pipefs
nodev anon_inodefs
nodev configfs
nodev devpts
nodev hugetlbfs
nodev autofs
nodev pstore
nodev mqueue
nodev selinuxfs
xfs
[root@localhost ~]#
查看内核支持的模块(CentOS 7)
[root@localhost ~]# lsmod
Module Size Used by
ip6t_rpfilter 12595 1
ipt_REJECT 12541 2
nf_reject_ipv4 13373 1 ipt_REJECT
ip6t_REJECT 12625 2
nf_reject_ipv6 13717 1 ip6t_REJECT
xt_conntrack 12760 17
ip_set 36439 0
nfnetlink 14696 1 ip_set
ebtable_nat 12807 1
ebtable_broute 12731 1
bridge 136173 1 ebtable_broute
stp 12976 1 bridge
llc 14552 2 stp,bridge
ip6table_nat 12864 1
nf_conntrack_ipv6 18935 10
nf_defrag_ipv6 35104 1 nf_conntrack_ipv6
nf_nat_ipv6 14131 1 ip6table_nat
ip6table_mangle 12700 1
ip6table_security 12710 1
ip6table_raw 12683 1
iptable_nat 12875 1
nf_conntrack_ipv4 15053 9
nf_defrag_ipv4 12729 1 nf_conntrack_ipv4
nf_nat_ipv4 14115 1 iptable_nat
nf_nat 26787 2 nf_nat_ipv4,nf_nat_ipv6
nf_conntrack 133387 6 nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_conntrack_ipv4,nf_conntrack_ipv6
iptable_mangle 12695 1
iptable_security 12705 1
iptable_raw 12678 1
ebtable_filter 12827 1
ebtables 35009 3 ebtable_broute,ebtable_nat,ebtable_filter
ip6table_filter 12815 1
ip6_tables 26901 5 ip6table_filter,ip6table_mangle,ip6table_security,ip6table_nat,ip6table_raw
iptable_filter 12810 1
vmw_vsock_vmci_transport 30577 1
vsock 35327 2 vmw_vsock_vmci_transport
iosf_mbi 13523 0
crc32_pclmul 13113 0
ghash_clmulni_intel 13259 0
aesni_intel 69884 0
lrw 13286 1 aesni_intel
gf128mul 14951 1 lrw
glue_helper 13990 1 aesni_intel
ablk_helper 13597 1 aesni_intel
cryptd 20359 3 ghash_clmulni_intel,aesni_intel,ablk_helper
ppdev 17671 0
btusb 41436 0
btrtl 12945 1 btusb
btbcm 14040 1 btusb
btintel 15709 1 btusb
bluetooth 544565 5 btbcm,btrtl,btusb,btintel
vmw_balloon 18190 0
joydev 17377 0
rfkill 22391 1 bluetooth
sg 40721 0
pcspkr 12718 0
ahci 34042 0
libahci 31992 1 ahci
nfit 49183 0
nvme 27722 0
nvme_core 52964 1 nvme
libnvdimm 132047 1 nfit
parport_pc 28165 0
parport 42299 2 ppdev,parport_pc
shpchp 37032 0
i2c_piix4 22390 0
vmw_vmci 67013 1 vmw_vsock_vmci_transport
ip_tables 27115 5 iptable_security,iptable_filter,iptable_mangle,iptable_nat,iptable_raw
xfs 978100 3
libcrc32c 12644 3 xfs,nf_nat,nf_conntrack
sd_mod 46322 3
crc_t10dif 12714 1 sd_mod
sr_mod 22416 0
cdrom 42556 1 sr_mod
crct10dif_generic 12647 0
ata_generic 12910 0
pata_acpi 13038 0
vmwgfx 235405 1
drm_kms_helper 159169 1 vmwgfx
syscopyarea 12529 1 drm_kms_helper
sysfillrect 12701 1 drm_kms_helper
sysimgblt 12640 1 drm_kms_helper
fb_sys_fops 12703 1 drm_kms_helper
ttm 99345 1 vmwgfx
drm 370825 4 ttm,drm_kms_helper,vmwgfx
crct10dif_pclmul 14289 1
crct10dif_common 12595 3 crct10dif_pclmul,crct10dif_generic,crc_t10dif
crc32c_intel 22079 1
mptspi 22542 2
serio_raw 13413 0
i2c_core 40756 3 drm,i2c_piix4,drm_kms_helper
e1000 137500 0
ata_piix 35038 0
scsi_transport_spi 30732 1 mptspi
libata 238896 5 ahci,pata_acpi,libahci,ata_generic,ata_piix
mptscsih 40150 1 mptspi
mptbase 105960 2 mptspi,mptscsih
dm_mirror 22124 0
dm_region_hash 20813 1 dm_mirror
dm_log 18411 2 dm_region_hash,dm_mirror
dm_mod 123303 11 dm_log,dm_mirror
[root@localhost ~]#
Linux每个分区就可以使用一个独立的文件系统,但最后都要被挂载在根目录下
CPU分为四个环
最内部的环ring0跑内核,最外部的环ring3跑软件,ring1,ring2不在使用
所以只有内核可以进行硬件调用,软件必须通过内核才能实现硬件的调用

24.2 磁盘管理
1、文件系统管理
创建文件系统:重新创建文件系统会损坏原有文件
mkfs: make file system
(1)-t FSTYPE
mkfs -t ext2 = mkfs.ext2
mkfs -t ext3 = mkfs.ext3 = mke2fs -j = mke2fs -t ext3
(2)mkfs.FS_TYPE /dev/DEVICE (FS_TYPE指的是文件系统类型)
mke2fs:专门管理ext系列文件系统:
-t {ext2|ext3|ext4}:指定格式
-j: 创建ext3类型文件系统(相当于-t ext3)
-b BLOCK_SIZE: 指定块大小,默认为4096;可用取值为1024、2048或4096;
-L LABEL:指定分区卷标;
-m #: 指定预留给超级用户的块数百分比(为管理人员预备的)
-i #: 用于指定为多少字节的空间创建一个inode,默认为8192;此大小不应小于block大小;
-N #: 指定inode个数;
-F: 强制创建文件系统;
-E: 用户指定额外文件系统属性;
-O FEATURE[,…]:启用指定特性
-O ^FEATURE:关闭指定特性
[root@localhost ~]# mke2fs -b 1024 -m 3 -L MYDATA /dev/sdc
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdc is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=MYDATA
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 1048576 blocks
31457 blocks (3.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=68157440
128 block groups
8192 blocks per group, 8192 fragments per group
512 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409, 663553,
1024001
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
[root@localhost ~]# blkid /dev/sdc
/dev/sdc: LABEL="MYDATA" UUID="a59eac3b-c56d-40a9-b433-972cdb48afa6" TYPE="ext2"
[root@localhost ~]#
blkid: 查询或查看磁盘设备的相关属性
-U UUID:根据指定的UUID来查找对应的设备
-L LABEL:根据制定的LABEL来查找对应的设备
[root@localhost ~]# blkid
/dev/sda1: UUID="c3a88fcb-06d4-4775-9a27-971904c2b154" TYPE="xfs"
/dev/sda2: UUID="0R0BFP-witm-SfMZ-d9an-26rT-JDtg-XzwGqy" TYPE="LVM2_member"
/dev/mapper/centos-root: UUID="71c7bb53-2826-49e8-bb0c-d6a112a01836" TYPE="xfs"
/dev/mapper/centos-swap: UUID="eb2dd31d-36f2-47e7-a474-7025f2dd6a1b" TYPE="swap"
/dev/mapper/centos-home: UUID="92db6af3-9a84-4284-9a59-d4e9f79cb7ab" TYPE="xfs
[root@localhost ~]# mkfs.ext4 /dev/sdc
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdc is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
[root@localhost ~]# blkid /dev/sdc
/dev/sdc: UUID="ae7e23e0-db47-4b53-bb5d-fda50773ab8c" TYPE="ext4"
[root@localhost ~]#
[root@localhost ~]# mkfs.ext4 /dev/sdc
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdc is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
[root@localhost ~]# blkid /dev/sdc
/dev/sdc: UUID="ae7e23e0-db47-4b53-bb5d-fda50773ab8c" TYPE="ext4"
[root@localhost ~]#
[root@localhost ~]# mkfs.xfs -L MYDATA /dev/sdc
mkfs.xfs: /dev/sdc appears to contain an existing filesystem (ext4).
mkfs.xfs: Use the -f option to force overwrite.
[root@localhost ~]# mkfs.xfs -f /dev/sdc
meta-data=/dev/sdc isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=262144, 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@localhost ~]# blkid /dev/sdc
/dev/sdc: UUID="dd14e08c-1757-4cc5-986c-53de7ec05f13" TYPE="xfs"
[root@localhost ~]# mkfs.btrfs -f /dev/sdc
btrfs-progs v4.9.1
See http://btrfs.wiki.kernel.org for more information.
Label: (null)
UUID: 9671cf06-920b-4738-9bba-81a3b00fc2db
Node size: 16384
Sector size: 4096
Filesystem size: 1.00GiB
Block groups:
Data: single 8.00MiB
Metadata: DUP 51.19MiB
System: DUP 8.00MiB
SSD detected: no
Incompat features: extref, skinny-metadata
Number of devices: 1
Devices:
ID SIZE PATH
1 1.00GiB /dev/sdc
[root@localhost ~]# blkid /dev/sdc
/dev/sdc: UUID="9671cf06-920b-4738-9bba-81a3b00fc2db" UUID_SUB="20223c43-c91d-4a50-9297-66e3433f6e11" TYPE="btrfs"
[root@localhost ~]#
2、其他常用工具
(1)e2label DEVICE [LABEL]
用于查看或定义EXT文件系统的卷标
[root@localhost ~]# e2label /dev/sdc
MYDATA
[root@localhost ~]# e2label /dev/sdc DATA
[root@localhost ~]# e2label /dev/sdc
DATA
[root@localhost ~]#
(2)tune2fs: 调整文件系统的相关可调整属性的值
-l:查看指定文件系统超级块信息;super block
-j: 不损害原有数据,将ext2升级为ext3;
-L LABEL: 设定或修改卷标;
-m #: 调整预留百分比;
-r #: 指定预留块数;
-O:文件系统属性启用或禁用
-o: 设定默认挂载选项;
acl
-c #:指定挂载次数达到#次之后进行自检,0或-1表关闭此功能;
-i #: 每挂载使用多少天后进行自检;0或-1表示关闭此功能;
-l: 显示超级块中的信息;
[root@localhost ~]# tune2fs -l /dev/sdc
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name: DATA
Last mounted on: <not available>
Filesystem UUID: a59eac3b-c56d-40a9-b433-972cdb48afa6
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: ext_attr resize_inode dir_index filetype sparse_super
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 65536
Block count: 1048576
Reserved block count: 31457
Free blocks: 1029050
Free inodes: 65525
First block: 1
Block size: 1024
Fragment size: 1024
Reserved GDT blocks: 256
Blocks per group: 8192
Fragments per group: 8192
Inodes per group: 512
Inode blocks per group: 128
Filesystem created: Mon Jul 12 23:36:08 2021
Last mount time: n/a
Last write time: Mon Jul 12 23:40:37 2021
Mount count: 0
Maximum mount count: -1
Last checked: Mon Jul 12 23:36:08 2021
Check interval: 0 (<none>)
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Default directory hash: half_md4
Directory Hash Seed: 89099a6f-887d-4624-88e4-97ad656b609e
[root@localhost ~]#
(3)dumpe2fs: 显示文件属性信息
dumpe2fs [ -bfhixV ] [ -o superblock=superblock ] [ -o blocksize=blocksize ] device
-h: 只显示超级块中的信息
[root@localhost ~]# dumpe2fs /dev/sdc
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name: DATA
Last mounted on: <not available>
Filesystem UUID: a59eac3b-c56d-40a9-b433-972cdb48afa6
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: ext_attr resize_inode dir_index filetype sparse_super
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 65536
Block count: 1048576
Reserved block count: 31457
Free blocks: 1029050
Free inodes: 65525
First block: 1
Block size: 1024
Fragment size: 1024
Reserved GDT blocks: 256
Blocks per group: 8192
Fragments per group: 8192
Inodes per group: 512
Inode blocks per group: 128
Filesystem created: Mon Jul 12 23:36:08 2021
Last mount time: n/a
Last write time: Mon Jul 12 23:40:37 2021
Mount count: 0
Maximum mount count: -1
Last checked: Mon Jul 12 23:36:08 2021
Check interval: 0 (<none>)
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Default directory hash: half_md4
Directory Hash Seed: 89099a6f-887d-4624-88e4-97ad656b609e
Group 0: (Blocks 1-8192)
Primary superblock at 1, Group descriptors at 2-5
Reserved GDT blocks at 6-261
Block bitmap at 262 (+261), Inode bitmap at 263 (+262)
Inode table at 264-391 (+263)
7787 free blocks, 501 free inodes, 2 directories
Free blocks: 406-8192
Free inodes: 12-512
Group 1: (Blocks 8193-16384)
Backup superblock at 8193, Group descriptors at 8194-8197
Reserved GDT blocks at 8198-8453
Block bitmap at 8454 (+261), Inode bitmap at 8455 (+262)
Inode table at 8456-8583 (+263)
7801 free blocks, 512 free inodes, 0 directories
Free blocks: 8584-16384
Free inodes: 513-1024
Group 2: (Blocks 16385-24576)
Block bitmap at 16385 (+0), Inode bitmap at 16386 (+1)
Inode table at 16387-16514 (+2)
8062 free blocks, 512 free inodes, 0 directories
Free blocks: 16515-24576
Free inodes: 1025-1536
(4)fsck(file system check): 检查并修复Linux文件系统
-t FSTYPE: 指定文件系统类型=fsck.FS_TYPE(FS_TYPE一定要与分区上已有文件类型相同)
-a: 自动修复
[root@localhost ~]# blkid /dev/sdc
/dev/sdc: LABEL="DATA" UUID="a59eac3b-c56d-40a9-b433-972cdb48afa6" TYPE="ext2"
[root@localhost ~]# fsck.ext2 /dev/sdc
e2fsck 1.42.9 (28-Dec-2013)
DATA: clean, 11/65536 files, 19526/1048576 blocks
(5)e2fsck: 专用于修复ext2/ext3文件系统
-f: 强制检查;(检查前需要先卸载设备)
-p: 自动修复;
(6)mount:挂载
挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录成为其他文件访问入口的行为称之为是挂载。
卸载:解除此关联关系的过程称之为卸载;
mount 设备 挂载点
mount DEVICE MOUNT_POINT
-o loop: 挂载本地回环设备
mount /dev/sda5 /mnt/test
设备:
设备文件:/dev/sda5
卷标:LABEL=“”
UUID: UUID=“”
dir,挂载点:目录
要求:
1、此目录没有被其它进程使用;
2、目录得事先存在;
3、目录中的原有的文件将会暂时隐藏(最好选择空文件夹进行挂载);
mount: 显示当前系统已经挂载的设备及挂载点
mount [options] [-o options] DEVICE MOUNT_POINT
-a: 自动挂载所有支持自动挂载的设备,(在/etc/fstab文件中定义,且挂载选项中有自动挂载功能)
-n: 任何设备挂载时,默认都会更新/etc/mtab,使用—n选项意味着挂载设备时,不把信息写入此文件;
-t FSTYPE: 指定正在挂载设备上的文件系统的类型;不使用此选项时,mount会调用blkid命令获取对应文件系统的类型;
-r: (readonly)只读挂载,挂载光盘时常用此选项
-w: (read and write)读写挂载
-L:以LABEL指定挂载设备
-U:以UUID指定挂载设备
-o: 指定额外的挂载选项,也即指定文件系统启用的属性;
async:异步模式(速度快)
sync:同步模式(数据更安全,速度慢得多)
remount: 重新挂载当前文件系统
ro: 挂载为只读
rw: 读写挂载
atime:(默认)每次访问文件/目录都会更新访问时间戳
noatime:访问文件/目录不会更新访问时间戳(一般关闭,对于访问非常多的文件能显著提高访问速度)
diratime/nodiratime:目录的访问时间戳
auto/noauto:是否支持自动挂载
exec/noexec:是否支持文件系统上的应用程序运行为进程
dev/nodev:是否支持在此文件系统上使用设备文件
suid/noosuid:是否允许此文件系统更改SUID(避免黑客通过系统更改SUID)
remount:重新挂载
user/nouser:是否允许用户挂载此设备
acl:启动此文件系统上的acl功能
注:上述选项可多个同时使用,彼此使用逗号分割,尽量避免普通用户挂载
默认挂载选项:defaults
defaults
Use default options: rw, suid, dev, exec, auto, nouser, and async.
DEVICE为要挂载的设备:
(1)设备文件:例如/dev/sda1
(2)卷标:-L ‘LABEL‘,例如 -L 'MYDATA'
(3)UUID,-U 'UUID'
(4)伪文件系统名称:proc,sysfs,devtmpfs,configfs
挂载完成后,要通过挂载点访问对应文件系统上的文件;
(7)/etc/fstab
文件系统的配置文件/etc/fstab,OS在初始时,会自动用mount挂载此文件中每行定义的每个文件系统
每行定义一个要挂载的文件系统
[neeq@gbiccxbrl ~]$ cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri Dec 18 10:31:29 2015
#
# 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
#
要挂载的设备 挂载点 文件系统类型 挂载选项 转储频率(备份频率) 文件系统自动检测次序
(每多少天做一次完全备份) (只有根可以为1)
UUID=55b61d2f-b139-4336-a8ab-54389d9555a6 / ext4 defaults 1 1
UUID=c49032e0-d885-4d14-91fd-ff973cea66c0 /boot ext4 defaults 1 2
UUID=c31675c1-786c-479f-a6cf-01e263d2b4eb swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
UUID=d9bf2e82-327b-488d-b606-55801d31a41d /svn ext4 defaults 1 1
UUID=5999452a-7b86-42dc-8be9-fb31b0752f0b /webserver ext4 defaults 1 1
fstab目录详解
要挂载的设备或伪文件系统:
设备文件,LABEL(LABEL=“”)、UUID(UUID=“”),伪文件系统名称(proc,sysfs)
挂载选项:
defaults
转储频率(一般不配置转储):
0:不做备份
1:每天转储
2:每隔一天转储
自检次序(一般不配置自检):
0:不自检
1:首先自检,一般只有rootfs才用1
…
mount -a:挂载/etc/fstab文件中定义的所有文件系统
fuser: 验正进程正在使用的文件或套接字文件
-v: 查看某文件上正在运行的进程
-k:杀死正在访问对应文件的进程
-m:杀死正在访问挂载点的进程
fuser -km MOUNT_POINT:终止正在访问此挂载点的所有进程
umount: 卸载某文件系统
umount 设备/挂载点
卸载注意事项:
挂载的设备没有进程使用;
查看正在访问制定文件系统的用户
fuser -v /挂载点
清除正在访问此挂载点的所有进程
fuser -km /挂载点
24.3 swap分区及相关配置(非必要情况下建议不要使用交换分区)
CPU多路复用通过:time slice
X86CPU(32bit)当中
Memory引入了虚拟地址,线性地址(每个进程认为自己有4G空间可用)
对内存进行分页(page frame)
如果内存满了,可以在硬盘上划分出一部分空间,将不常用的内存里面的进程移到硬盘当中
这部分空间称之为是交换空间
swap in:将内存里面的进程移到硬盘当中
swap out:将硬盘里面的进程移到内存当中
交换空间的存在使得内存可以过载使用
Windows中称之为是虚拟内存
linux中的交换分区为swap分区:
1、free
查看当前系统的内存和虚拟内存使用情况
-m:以M为单位显示
-h:进行单位换算
[root@Daniel-R480 ~]# free
total used free shared buff/cache available
Mem: 33404872 6063620 27111900 17720 229352 27207520
Swap: 31018612 70528 30948084
[root@Daniel-R480 ~]# free -m
total used free shared buff/cache available
Mem: 32621 5922 26475 17 223 26568
Swap: 30291 68 30222
[root@Daniel-R480 ~]# free -h
total used free shared buff/cache available
Mem: 31G 5.8G 25G 17M 223M 25G
Swap: 29G 68M 29G
[root@Daniel-R480 ~]#
2、创建交换分区步骤:
(1)fdisk命令中,调整分区类型为82;
(2)mkswap /dev/sda8
-L LABEL
-U UUID
(3)启用或者关闭swap
swapon /dev/sda8(启用此设备中的交换空间)
-a:启用所有的定义在/etc/fstab文件中的交换设备
-p PRIORITY:指定优先级
swapoff /dev/sda8
3、回环设备及dd命令
loopback, 使用软件来模拟实现硬件
可使用回环设备来创建swap空间
创建一个镜像文件,120G
dd命令:复制并转换文件
复制底层的数据流
if=数据来源
of=数据存储目标
bs=1(block size,复制的文件大小)
count=2(复制数目)
seek=#: 创建数据文件时,跳过的空间大小(可以用来创建虚假大小的文件,可以du来确认真实大小);
磁盘拷贝:
dd if=/dev/sda of=/dev/sdb
MBR的备份和还原
dd if=/dev/sda of=/mnt/usb/mbr.backup bs=512 count=1
dd if=/mnt/usb/mbr.backup of=/dev/sda bs=512 count=1
破坏MBR中的bootloader:
dd if=/dev/zero of=/dev/sda bs=256 count=1
创建一个大小为1024的镜像文件
dd if=/dev/zero of=/var/swapfile bs=1M count=1024
/dev/zero:可以无限的出0
/dev/null:可以吞掉所有的数据
24.4 光盘挂载
挂载光盘设备
光盘设备文件:
IDE:/dev/hdc
SATA:/dev/sr0
符号链接文件:
/dev/cdrom
/dev/cdrw
/dev/dvd
/dev/dvdrw
mount -r /dev/cdrom /media/cdrom
unmount /dev/cdrom
练习:
1、创建一个2G的分区,文件系统为ext2,卷标为DATA,块大小为1024,预留管理空间为磁盘分区的8%;挂载至/backup目录,要求使用卷标进行挂载,且在挂载时启动此文件系统上的acl功能;
[root@localhost ~]# fdisk -l
#查看目前存在的硬盘,有sda,sdb,sdc,nvme0n1四块盘
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 /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 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: 0x000acbe0
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 209715199 103808000 8e Linux LVM
Disk /dev/mapper/centos-root: 53.7 GB, 53687091200 bytes, 104857600 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 /dev/mapper/centos-swap: 8455 MB, 8455716864 bytes, 16515072 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 /dev/nvme0n1: 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 /dev/mapper/centos-home: 44.1 GB, 44149243904 bytes, 86228992 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 /dev/sdc: 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
[root@localhost ~]# fdisk /dev/sdb
#选择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 0xfa7592c5.
Command (m for help): n
#创建新的分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
#选择基本分区或者是扩展分区,这里选择基本分区
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048): 2048
#配置初始sector,默认即可
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): 2g^H
#配置最后的sector,这个根据需求,按照标准来配置,前3个是错误示范
Value out of range.
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): 2g
Value out of range.
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): 2G
Value out of range.
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
Command (m for help): w
#保存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# partx /dev/sdb
#声明分区,让内核进行读取
NR START END SECTORS SIZE NAME UUID
1 2048 4196351 4194304 2G
[root@localhost ~]# fdisk -l /dev/sdb
#检查分区是否正常识别
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: 0xfa7592c5
Device Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
#分区已经显示出来了,说明正常识别
[root@localhost ~]# mkfs.ext2 -L DATA -b 1024 -m 8 /dev/sdb1
#对分区进行格式化,配置文件系统
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=DATA
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 2097152 blocks
167772 blocks (8.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=69206016
256 block groups
8192 blocks per group, 8192 fragments per group
512 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409, 663553,
1024001, 1990657
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
[root@localhost ~]# mkdir /backup
#创建分区要挂载的位置,这里是/backup
mkdir: cannot create directory ‘/backup’: File exists
[root@localhost ~]# blkid /dev/sdb1
#查看分区情况
/dev/sdb1: LABEL="DATA" UUID="0a96b1d2-eebe-4245-82b9-612ff8cde44c" TYPE="ext2"
[root@localhost ~]# mount -o acl /dev/sdb1 /backup
#挂载分区至/backup,并配置acl
[root@localhost ~]# df -h
#检查是否正常挂载,出现sdb1即说明正常挂载
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 50G 2.6G 48G 6% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 8.7M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/centos-home 42G 33M 42G 1% /home
/dev/sda1 1014M 143M 872M 15% /boot
tmpfs 781M 0 781M 0% /run/user/0
/dev/sdb1 2.0G 3.1M 1.9G 1% /backup
[root@localhost ~]#
2、将此文件系统的超级块中的信息中包含了block和inode的行保存至/tmp/partition.txt中;
#两个语句效果一样,选择一个进行执行即可,之后可以通过vim查看执行结果
[root@localhost ~]# dumpe2fs -h /dev/sdb1 | egrep -i "block|inode" >> /tmp/partition.txt
dumpe2fs 1.42.9 (28-Dec-2013)
[root@localhost ~]# vim /tmp/partition.txt
[root@localhost ~]# tune2fs -l /dev/sdb1 | egrep -i "block|inode" >> /tmp/partition.txt
[root@localhost ~]# vim /tmp/partition.txt
[root@localhost ~]#
3、复制/etc目录中的所有文件至此文件系统;而后调整此文件系统类型为ext3,要求不能损坏已经复制而来的文件;
[root@localhost ~]# cp -r /etc/* /backup/
[root@localhost ~]# tune2fs -j /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013)
Creating journal inode: done
[root@localhost ~]# blkid /dev/sdb1
#查看分区类型
/dev/sdb1: LABEL="DATA" UUID="0a96b1d2-eebe-4245-82b9-612ff8cde44c" SEC_TYPE="ext2" TYPE="ext3"
[root@localhost ~]# ls /backup/
#查看文件是否备份过来
4、调整其预留百分比为3%;
[root@localhost ~]# tune2fs -m 3 /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013)
Setting reserved blocks percentage to 3% (62914 blocks)
[root@localhost ~]#
5、以重新挂载的方式挂载此文件系统为不更新访问时间戳,并验正其效果;
[root@localhost ~]# stat /backup/inittab
#当前时间戳
File: ‘/backup/inittab’
Size: 511 Blocks: 2 IO Block: 1024 regular file
Device: 811h/2065d Inode: 53 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:unlabeled_t:s0
Access: 2021-07-13 22:05:24.964712195 -0400
Modify: 2021-07-13 22:05:24.984712387 -0400
Change: 2021-07-13 22:05:24.984712387 -0400
Birth: -
[root@localhost ~]# cat /backup/inittab
#cat一下,修改时间戳
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#
[root@localhost ~]# stat /backup/inittab
#stat可以看到accesstime更新了
File: ‘/backup/inittab’
Size: 511 Blocks: 2 IO Block: 1024 regular file
Device: 811h/2065d Inode: 53 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:unlabeled_t:s0
Access: 2021-07-13 22:16:20.348151973 -0400
Modify: 2021-07-13 22:05:24.984712387 -0400
Change: 2021-07-13 22:05:24.984712387 -0400
Birth: -
[root@localhost ~]# mount -o remount,noatime /backup/
#重新挂载为accesstime不随访问更改的系统
[root@localhost ~]# cat /backup/inittab
#cat测试,此时时间戳应该不会变
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#
[root@localhost ~]# stat /backup/inittab
#stat测试,时间戳确实没变
File: ‘/backup/inittab’
Size: 511 Blocks: 2 IO Block: 1024 regular file
Device: 811h/2065d Inode: 53 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:unlabeled_t:s0
Access: 2021-07-13 22:16:20.348151973 -0400
Modify: 2021-07-13 22:05:24.984712387 -0400
Change: 2021-07-13 22:05:24.984712387 -0400
Birth: -
[root@localhost ~]#
6、对此文件系统强行做一次检测;
[root@localhost ~]# e2fsck -f /dev/sdb1
e2fsck 1.42.9 (28-Dec-2013)
/dev/sdb1 is mounted.
e2fsck: Cannot continue, aborting.
[root@localhost ~]# umount /dev/sdb1
[root@localhost ~]# e2fsck -f /dev/sdb1
e2fsck 1.42.9 (28-Dec-2013)
Backing up journal inode block information.
Moving journal from /.journal to hidden inode.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
DATA: ***** FILE SYSTEM WAS MODIFIED *****
DATA: 2372/131072 files (5.6% non-contiguous), 97234/2097152 blocks
[root@localhost ~]#
7、删除复制而来的所有文件,并将此文件系统重新挂载为同步(sync);而后再次复制/etc目录中的所有文件至此挂载点,体验其性能变化;
[root@localhost ~]# mount /dev/sdb1 /backup/
[root@localhost ~]# mount -o remount,sync /backup
[root@localhost ~]# cp -ru /etc/* /backup/
[root@localhost ~]# cd
评论关闭。