Linux进阶篇--磁盘分区管理

Linux进阶篇–磁盘分区管理

11.1 磁盘基础介绍

设备文件
* I/O Ports:I/O设备地址
* 设备类型:
  块设备:block,存取单位“块”,来自于磁盘
  字符设备:char,存取单位“字符”,来自于键盘
* 设备文件:关联至一个设备驱动程序,进而能够与之对应硬件设备进行通信
* 设备号码:
  主设备号:major number, 标识设备类型
  次设备号:minor number, 标识同一类型下的不同设备

[root@centos7 ~]#ll /dev/sd*
brw-rw----. 1 root disk 8,  0 Aug 18 20:31 /dev/sda
brw-rw----. 1 root disk 8,  1 Aug 18 20:31 /dev/sda1
brw-rw----. 1 root disk 8,  2 Aug 18 20:31 /dev/sda2
brw-rw----. 1 root disk 8,  3 Aug 18 20:31 /dev/sda3
brw-rw----. 1 root disk 8,  4 Aug 18 20:31 /dev/sda4
brw-rw----. 1 root disk 8,  5 Aug 18 20:31 /dev/sda5
#其中8即为主设备号,0-5即为次设备号

硬盘接口类型
* 并行:
IDE:133MB/s在实际应用中也被称为ATA,早期普通计算机使用的接口类型,现已淘汰
SCSI:640MB/s使用与早期服务器上的接口类型,逐渐被代替
* 串口:
SATA:6Gbps即serial ATA;稳定性较强,仍是目前大多数服务器使用的接口类型
SAS:6Gbps向下兼容SATA硬盘,传输速率较高,但因其昂贵的价格,没有普及使用
USB:480MB/s移动存储设备接口(如u盘,移动硬盘等)
* rpm: rotations per minute,即每分钟转数

机械硬盘和固态硬盘
* 机械硬盘(HDD):Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成
* 固态硬盘(SSD):Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也与普通硬盘一致
二者的区别:
* 相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传输速率性能是HDD的2倍
* 相较于SSD,HDD在价格、容量、使用寿命上占有绝对优势
* 硬盘有价,数据无价,目前SSD不能完全取代HHD

设备文件
* 磁盘设备的设备文件命名:/dev/DEV_FILE
* SCSI, SATA, SAS,IDE,USB: /dev/sd
* 虚拟磁盘:/dev/vd
* 不同磁盘标识:a-z,aa,ab…
  /dev/sda, /dev/sdb, …
* 同一设备上的不同分区:1,2, …
  /dev/sda1, /dev/sda5
* 硬盘存储术语
head:磁头
track:磁道
cylinder:柱面
sector:扇区,每个扇区在磁盘上用512byte表示
CHS模式支持的硬盘容量有限,用8bit来存储磁头地址,最多为2\^8=256;用10bit来存储柱面地址,最大为2\^10=1024;用6bit来存储扇区地址,最大为2^6=64,因为扇区从0扇区开始,因此扇区范围为0~63;而一个扇区共有512Byte,这样使用CHS寻址一块硬盘最大容量为256 * 1024 * 63 * 512B = 8064 MB(1MB = 1048576B)(若按1MB=1000000B来算就是8.4GB)

硬盘寻址:CHS和LBA
* CHS
 * 采用24bit位寻址
 * 最大寻址空间为8GB;
* LBA(logical block addressing)
 LBA是一个整数,通过转换成CHS格式完成磁盘具体寻址
 LBA采用48个bit位寻址
 最大寻址空间128PB
* 由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可以使用CHS寻址方式或是LBA寻址方式;在磁盘容量大于大概8GB时,则只能使用LBA寻址方式

使用分区空间
(1)设备识别
(2)设备分区
(3)创建文件系统
(4)标记文件系统
(5)在/etc/fstab文件中创建条目
(6)挂载新的文件系统

11.2 磁盘分区

两种分区方式:MBR,GPT
MBR分区
* MBR: Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T
* 如何分区:按柱面分区
* 0磁道0扇区:512bytes
 446bytes: boot loader
 64bytes:分区表
  每个硬盘的分区表使用64byte表示,每16byte表示一个主分区,因此,主分区最多只能分4个
 2bytes: 55AA,结束标记字
* 4个主分区;3主分区+1扩展(N个逻辑分区)

GPT分区
* GPT:GUID(Globals Unique Identifiers)partition table 支持128个分区,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block)
* 使用128位UUID(Universally Unique Identifier) 表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位
* UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动

11.3 管理分区

  • 列出块设备:lsblk
      -f:列出文件系统
  • 创建分区使用
     * fdisk:创建MBR分区
     * gdisk:创建GPT分区
     * parted:高级分区操作
  • partprobe:同步分区表

parted命令
* parted的操作都是实时生效的,小心使用
* 用法:parted [选项]… [设备[命令[参数]…]…]
parted /dev/sdbmklabelgpt|msdos
parted /dev/sdbprint
parted /dev/sdbmkpartprimary 1 200 (默认M)
parted /dev/sdbrm1
parted –l 列出分区信息

分区工具fdisk和gdisk
这两种工具的区别在于:fdisk是MBR分区管理工具,gdisk是GPT管理分区工具
* gdisk /dev/sdb 类fdisk的GPT分区工具
* fdisk -l [-u] [device…] 查看分区
* fdisk /dev/sdb 管理分区
注意:fdisk命令后跟的是硬盘名称,而不是分区名称
* 常用子命令:
  p 分区列表
  t 更改分区类型
  l 列出分区类型
  常用分区类型:
   82 Linux swap / So(swap分区类型)
   83 Linux(linux基础分区)
   8e Linux LVM(逻辑卷管理)
   fd Linux raid auto(raid类型,配置软raid时使用)
  n 创建新分区
  d 删除分区
  v 校验分区
  u 转换单位
  w 保存并退出
  q 不保存并退出
注意:新建分区中,主分区最多创建4个;如果想要创建更多的分区,可以把第4个分区创建为扩展分区,在扩展分区中创建逻辑分区,即可增加4个以上的分区

[root@centos7 ~]#fdisk /dev/sdb     使用fdisk命令创建分区
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.


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-4,默认选1分区
First sector (2048-41943039, default 2048):  选择扇区范围,选择默认范围
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +5G   设置分区大小为5G
Partition 1 of type Linux and of size 5 GiB is set

Command (m for help): w       保存分区
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@centos7 ~]#lsblk        查看分区/dev/sdb1
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0   50G  0 part /
├─sda3   8:3    0   30G  0 part /data
├─sda4   8:4    0    1K  0 part 
└─sda5   8:5    0    3G  0 part [SWAP]
sdb      8:16   0   20G  0 disk 
└─sdb1   8:17   0    5G  0 part 

注意:分区完后硬盘和内存中的分区表可能不同步,因此需要同步
磁盘分区表和内存分区表如果不同步,会导致以下问题:
当原有硬盘上已有分区时,再次对磁盘分区,保存新分区有时会报错,如果是新增硬盘,则不存在此问题
如果分区未做同步,报错信息如下:

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.

知识扩展:
删除分区表:dd if=/dev/zero of=/dev/sdb bs=1 count=512

同步分区表
* 查看内核是否已经识别新的分区:
  cat /proc/partations
* centos6通知内核重新读取硬盘分区表
* 新增分区命令:
  partx -a /dev/DEVICE
  kpartx -a /dev/DEVICE -f: force
* 删除分区命令:
  partx -d –nr M-N /dev/DEVICE
注意:这里的M-N是指要删除的连续的分区,如果是单个分区,则需要单个删除
* CentOS 5,7: 使用partprobe
  partprobe [/dev/DEVICE]

11.4 管理文件系统

文件系统
* 文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统
* 从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等
* 查看支持的文件系统:ls /lib/modules/`uname–r`/kernel/fs
* 各种文件系统:
https://en.wikipedia.org/wiki/Comparison_of_file_systems 维基百科

文件系统类型
* Linux文件系统:
ext2(Extended file system) :适用于那些分区容量不是太大,更新也不频繁的情况,例如/boot 分区。
ext3:是ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复。它通常被用作通用的文件系统
ext4:是ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件(16TB)、最大1EB的文件系统,以及速度的提升
xfs:SGI,支持最大8EB的文件系统
btrfs(Oracle), reiserfs, jfs(AIX), swap
* 光盘:iso9660
* Windows:FAT32, exFAT,NTFS
* Unix: FFS(fast), UFS(unix), JFS2
* 网络文件系统:NFS, CIFS
* 集群文件系统:GFS2, OCFS2(oracle)
* 分布式文件系统:fastdfs,ceph, moosefs, mogilefs, glusterfs, Lustre
* RAW:未经处理或者未经格式化产生的文件系统

文件系统分类
* 根据其是否支持”journal”功能:
  日志型文件系统: ext3, ext4, xfs, …
  非日志型文件系统: ext2, vfat
* 文件系统的组成部分:
  内核中的模块:ext4, xfs, vfat
  用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
* Linux的虚拟文件系统:VFS
* 查询支持的文件系统:cat /proc/filesystems

创建文件系统
* mkfs命令:
* (1)mkfs.FS_TYPE /dev/DEVICE
  FS_TYPE:ext4、xfs、btrfs、vfat
* mkfs -t FS_TYPE /dev/DEVICE
  -L ‘LABEL’:设定卷标

[root@centos7 ~]#mkfs.xfs(ext4) /dev/sdb1    为分区创建文件系统xfs(ext4)
[root@centos7 ~]#mkfs -t  xfs(ext4) /dev/sdb1
[root@centos7 ~]#lsblk -f /dev/sdb1   查看/dev/sdb1的文件系统
NAME FSTYPE LABEL UUID                                 MOUNTPOINT
sdb1 ext4         85834c6b-5c40-4288-9703-75bbd6f22fa2

注意:centos7版本支持xfs、ext系列文件系统;而centos6版本支持ext系列文件系统,若想要使用xfs文件系统,则需要安装工具:xfsprogs

创建ext系列文件系统
mke2fs:ext系列文件系统专用管理工具
  -t {ext2|ext3|ext4}
  注意:该命令如果不加选项,默认创建的是ext2文件系统,因此如果创建ext系列其他文件系统,需要加上选项:-t FS_TYPE
  -b {1024|2048|4096} 指定块大小
  -L ‘LABEL’ 指定卷标
  -j: 相当于-t ext3 创建ext3文件系统
    mkfs.ext3 = mkfs-t ext3 = mke2fs -j = mke2fs -t ext3
  -i#: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小
  -N #:指定分区中创建多少个inode
  -I 一个inode记录占用的磁盘空间大小,128—4096
  -m #: 默认5%,为管理人员预留空间占总空间的百分比;当分区空间过大时,管理预留空间会占用较大空间,因此需要更改为自己所需要的空间大小
  -O FEATURE[,…]:启用指定特性
  -O ^FEATURE:关闭指定特性

[root@centos7 ~]#mke2fs -O has_journal /dev/sdb1
[root@centos7 ~]#lsblk -f /dev/sdb1
NAME FSTYPE LABEL UUID                                 MOUNTPOINT
sdb1 ext3         c04db398-1430-47cb-8d4d-56d7189e9c5f 
mke2fs默认创建ext2文件系统,该系统不具备日志功能,而加上-O has_journal选项后,文件增加日志功能,文件系统自动更改为ext3文件系统

[root@centos7 ~]#mke2fs -O ^has_journal /dev/sdb1   
[root@centos7 ~]#lsblk -f /dev/sdb1
NAME FSTYPE LABEL UUID                                 MOUNTPOINT
sdb1 ext2         896d9616-b011-4302-bc7a-bb6070faa6ed 
使用-O ^has_journal去除日志功能,文件系统自动更改为ext2文件系统

文件系统标签
* 指向设备的另一种方法
* 与设备无关
* blkid:块设备属性信息查看
*用法:blkid [OPTION]… [DEVICE]
  -U UUID: 根据指定的UUID来查找对应的设备
  -L LABEL:根据指定的LABEL来查找对应的设备
* e2label:管理ext系列文件系统的LABEL
  e2label DEVICE [LABEL]
* findfs:查找分区
  findfs[options] LABEL=\

[root@centos7 ~]#blkid
/dev/sda1: UUID="da6027b7-04a8-412e-b54d-0a3cbe7a9e0d" TYPE="xfs" 
/dev/sda2: UUID="2f1bda24-d0a0-4498-84b2-76ecad8602b8" TYPE="xfs" 
/dev/sda3: UUID="13feb009-a4b1-4521-b6fe-2596f033f6a5" TYPE="xfs" 
/dev/sda5: UUID="bbbfb1b0-b076-4203-a4d3-0b7cd755019d" TYPE="swap" 
/dev/sdb1: UUID="6768767b-9def-412d-a360-4f2c46fb024f" TYPE="ext4" 

blkid和findfs都可以根据uuid和卷标查找分区,但是要注意两个命令后跟参数的细微差别

[root@centos7 ~]#blkid -U 6768767b-9def-412d-a360-4f2c46fb024f
/dev/sdb1
[root@centos7 ~]#findfs  UUID=6768767b-9def-412d-a360-4f2c46fb024f
/dev/sdb1

tune2fs
* tune2fs:重新设定ext系列文件系统可调整参数的值
  -l:查看指定文件系统超级块信息;super block
  -L ‘LABEL’:修改卷标
  -m #:修预留给管理员的空间百分比
  -j: 将ext2升级为ext3,类似于mke2fs -j
  -O: 文件系统属性启用或禁用,–O ^has_journal,类似于mkfs -O
  -o: 调整文件系统的默认挂载选项,–o ^acl
  -U UUID: 修改UUID号
* dumpe2fs:
  块分组管理,32768块
  -h:查看超级块信息,不显示分组信息

注意:centos7系统默认具有acl权限,centos6系统需要手动设置acl功能
如:tune2fs -o acl /dev/sdb1

文件系统检测和修复
* 常发生于死机或者非正常关机之后
* 挂载为文件系统标记为“no clean”
* 注意:一定不要在挂载状态下修复
* fsck: File System Check
  fsck.FS_TYPE
  fsck-t FS_TYPE
  -p: 自动修复错误
  -r: 交互式修复错误
  FS_TYPE一定要与分区上已经文件类型相同
* e2fsck:ext系列文件专用的检测修复工具
  -y:自动回答为yes
  -f:强制修复

10.5 挂载设备

挂载mount
* 挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为
* 卸载:为解除此关联关系的过程
* 把设备关联挂载点:mount Point
  mount
* 卸载时:可使用设备,也可以使用挂载点
  umount
* 挂载点下原有文件在挂载完成后会被临时隐藏
* 挂载点目录一般为空

用mount命令挂载文件系统
* 挂载方法:mount DEVICE MOUNT_POINT
* mount:通过查看/etc/mtab文件显示当前已挂载的所有设备
* mount [-fnrsvw] [-t vfstype] [-o options] device dir
  device:指明要挂载的设备;
  (1) 设备文件:例如/dev/sda5
  (2) 卷标:-L ‘LABEL’, 例如-L ‘MYDATA’
  (3) UUID, -U ‘UUID’:例如-U ‘0c50523c-43f1-45e7-85c0-a126711d406e’
  (4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs
  dir:挂载点
    事先存在;建议使用空目录
    进程正在使用中的设备无法被卸载

[root@centos7 ~]#mkdir /mnt/sdb1
[root@centos7 ~]#mount /dev/sdb1 /mnt/sdb1
[root@centos7 ~]#cat /etc/mtab或mount     查看挂载信息
[root@centos7 ~]#ll /etc/mtab     
lrwxrwxrwx. 1 root root 17 Jul 18 17:15 /etc/mtab -> /proc/self/mounts
查看/etc/mtab详细信息,发现该文件是/proc/self/mounts的软链接,而mount命令调用的也是此文件

注意:在配置文件/etc/fstab写入挂载信息时,尽量使用设备uuid挂载比较稳定,因为设备名称以及卷标都可能会被更改,因此使用设备名称挂载不稳定

知识扩展:
挂载之前要先创建文件系统,挂载是把文件系统和硬盘关联起来
一个目录(挂载点)同时只能挂载一个设备,不能挂载多个设备,如果挂载多个设备,则后续设备会把前面挂载的设备顶替掉
一个设备可以挂载到多个挂载点
挂载点目录一般为空,如果当挂载点的目录里有文件,把设备挂载到该目录后,该目录原有的文件将无法访问(原文件不会删除,取消挂载后恢复访问),只能访问挂载的设备里的文件
也可循环挂载

练习:
根据/etc/fstab找出根目录挂载在哪个分区

findfs `grep " / "  /etc/fstab`
或findfs  `sed -nr '/ \/ /s/(^[^[:space:]]+).*/\1/p'  /etc/fstab`

mount常用命令选项
-t vsftype:指定要挂载的设备上的文件系统类型
-r: readonly,只读挂载
-w: read and write, 读写挂载
-n: 不更新/etc/mtab,mount不可见
一般情况下,mount挂载信息会更新到/etc/mtab文件中,使用-n选项不更新该文件,挂载成功,但mount信息会被隐藏
-a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
-L ‘LABEL’: 以卷标指定挂载设备
-U ‘UUID’: 以UUID指定要挂载的设备
-B, –bind:把目录挂载到另一个目录上
cat /proc/mounts 查看内核追踪到的已挂载的所有设备
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
  async:异步模式sync:同步模式,内存更改时,同时写磁盘
  atime/noatime:包含目录和文件
  diratime/nodiratime:目录的访问时间戳
  auto/noauto:是否支持自动挂载,是否支持-a选项
  exec/noexec:是否支持将文件系统上运行应用程序
  dev/nodev:是否支持在此文件系统上使用设备文件
  suid/nosuid:是否支持suid和sgid权限
  remount:重新挂载
  ro:只读rw:读写
  user/nouser:是否允许普通用户挂载此设备,/etc/fstab使用
  acl:启用此文件系统上的acl功能
  loop: 使用loop设备
defaults:相当于rw, suid, dev, exec, auto, nouser, async

当用户正在使用设备时,无法将正在使用的设备取消挂载
mount -o remoount,rw(ro) /mnt/sdb1   使用该命令,在不影响用户使用的情况下更改设备为读写或只读状态

使用mount -B选项,可以把目录挂载到目录(挂载点)上

[root@centos7 ~]#mkdir /mnt/boot  
[root@centos7 ~]#mount -B  /boot /mnt/boot   把boot目录挂载到/mnt/boot
[root@centos7 ~]#ls -i /boot /mnt/boot     查看两个文件节点编号
/boot:
     72 config-3.10.0-862.el7.x86_64
     67 efi
     68 grub
1572928 grub2
     76 initramfs-0-rescue-7eab25876df747da952cee5f5a6dbc5f.img
     75 initramfs-3.10.0-862.el7.x86_64.img
     73 symvers-3.10.0-862.el7.x86_64.gz
     71 System.map-3.10.0-862.el7.x86_64
     77 vmlinuz-0-rescue-7eab25876df747da952cee5f5a6dbc5f
     74 vmlinuz-3.10.0-862.el7.x86_64

/mnt/boot:
     72 config-3.10.0-862.el7.x86_64
     67 efi
     68 grub
1572928 grub2
     76 initramfs-0-rescue-7eab25876df747da952cee5f5a6dbc5f.img
     75 initramfs-3.10.0-862.el7.x86_64.img
     73 symvers-3.10.0-862.el7.x86_64.gz
     71 System.map-3.10.0-862.el7.x86_64
     77 vmlinuz-0-rescue-7eab25876df747da952cee5f5a6dbc5f
     74 vmlinuz-3.10.0-862.el7.x86_64
发现两个目录中文件的节点编号一致,说明挂载成功

loop 用文件模拟文件系统(即文件挂载到目录)

先创建需要大小的文件,如100M大小
dd  if=/dev/zero of=/data/p1 bs=1M count=100
然后创建文件系统
mkfs.ext4  /data/p1
blkid /data/p1  查看文件类型
mkdir /mnt/p1
mount -o loop /data/p1  /mnt/p1   
centos6中需加上-o loop选项即可挂载,centos7系统下不需要-o loop选项即可挂载

知识扩展:
在centos6版本中,使用文件模拟文件系统,挂载时需要启用loop功能(即mount -o loop),在centos6中默认启用loop设备默认有8个,超出此范围无法继续使用loop设备(centos7系统loop设备会自动生成,因此没有此限制)
解决方法:修改内核参数(针对centos6版本)
在/boot/grub/grub.conf文件中,kernel行最后添加max_loop=N(该数字可自定义)即可,修改完毕重启设备,loop设备即可超过8个。

kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=UUID=c6650924-418d-4c84-b6e5-c3a3b7b14323 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet max_loop=100

如果新增加的loop使用完,可以使用mknod创建特殊文件
mknod /dev/loop100 b 7 100
其中b是指块设备;7是指设备主编号;100是指设备次编号

卸载命令
* 查看挂载情况
  findmnt MOUNT_POINT|device
* 查看正在访问指定文件系统的进程
  lsof MOUNT_POINT
  fuser -v MOUNT_POINT
* 终止所有在正访问指定的文件系统的进程
  fuser -km MOUNT_POINT
* 卸载
  umount DEVICE
  umount MOUNT_POINT
注意:在卸载分区前,要先查看是否有其他用户在使用该分区,如果有,则可以终止访问该文件系统的用户,然后卸载。

[root@centos7 sdb1]#lsof /mnt/sdb1
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    2071 root  cwd    DIR   8,17     4096    2 /mnt/sdb1
lsof    4169 root  cwd    DIR   8,17     4096    2 /mnt/sdb1
lsof    4170 root  cwd    DIR   8,17     4096    2 /mnt/sdb1
[root@centos7 sdb1]#fuser -v /mnt/sdb1
                     USER        PID ACCESS COMMAND
/mnt/sdb1:           root     kernel mount /mnt/sdb1
                     root       2071 ..c.. bash

练习:判断/mnt/sdb1是否一个挂载点,如果不是,把/dev/sdb1挂载到该挂载点;如果是,则不挂载
findmnt /mnt/sdb1 &>/dev/null || mount /dev/sdb1/ /mnt/sdb1

挂载点和/etc/fstab
* 配置文件系统体系
* 被mount、fsck和其他程序使用
* 系统重启时保留文件系统提示
* 可以在设备栏使用文件系统卷标
* 使用mount -a命令挂载/etc/fstab中的所有文件系统

文件挂载配置文件
* /etc/fstab每行定义一个要挂载的文件系统
* 1、要挂载的设备或伪文件系统
  设备文件
  LABEL:LABEL=””
  UUID:UUID=””
  伪文件系统名称:proc, sysfs
* 2、挂载点
* 3、文件系统类型:ext4,xfs,nfs,none
* 4、挂载选项:defaults,acl,bind
* 5、转储频率:0:不做备份1:每天转储2:每隔一天转储
* 6、fsck检查的文件系统的顺序:允许的数字是0, 1, 和2
    0:不自检
    1:首先自检;一般只有rootfs才用
    2:非rootfs使用

示例:

[root@centos7 sdb1]#cat /etc/fstab 
UUID=2f1bda24-d0a0-4498-84b2-76ecad8602b8 /                       xfs     defaults        0 0
UUID=da6027b7-04a8-412e-b54d-0a3cbe7a9e0d /boot                   xfs     defaults        0 0
UUID=13feb009-a4b1-4521-b6fe-2596f033f6a5 /data                   xfs     defaults        0 0
UUID=bbbfb1b0-b076-4203-a4d3-0b7cd755019d swap                    swap    defaults        0 0
UUID=6768767b-9def-412d-a360-4f2c46fb024f  /mnt/sdb1              ext4    defaults        0  0

注意:在挂载时,尽量使用设备的uuid挂载,,因为设备名称、卷标会被更改,因此使用设备名称挂载不稳定,而每个设备的uuid是唯一的,因此使用uuid挂载比较稳定。

实验1:当/etc/fstab表中要挂载的分区被删除
当分区被误删除,该分区会被其他分区自动顶替,系统无法正常启动。一旦出现这种情况,系统所有分区默认只有读权限,无法更改fstab表。
解决方法:
使用(mount -o remount,rw /)重新挂载根分区,并使其具有写权限,更改fstab表,恢复即可。
/etc/fstab表中 0 0,最后一个0表示检查次序,如果/etc/fstab表中,最后一项写成”0 0”不检测系统分区,相对来说比较安全,不会出现系统无法启动的情况

实验2:将/home目录迁移到一个独立分区中

1、创建分区,创建文件系统(即格式化),同步分区表  
如:该分区为/dev/sda6  
2、想要迁移数据,需要把数据复制到该分区中,要想使用该分区,则需要将该分区挂载到一个挂载点才能使用  
挂载到一个临时挂载点(如:/mnt/home)  
mkdir  /mnt/home   
mount /dev/sda6  /mnt/home  
复制之前,要保证该分区没有其他人在访问,不再向该分区写入数据  
使用命令init 1(单用户模式) 进入维护模式,一旦进入该模式,该设备会被断网,无法远程,需要到物理机进行操作  
3、复制文件  
cp -a /home /mnt/home  
4、挂载永久有效,需要写入/etc/fstab表中  
/dev/sda6    /home   xfs   defaults   0 0   
注意:此时的挂载点是/home而不是/mnt/home;/mnt/home是临时挂载点,随着系统重启而失效  
mount -a  使fstab表立即生效  
5、删除原/home下的文件   
要删除原/home文件需要将/home取消挂载  umount  /home  
删除/home目录  rm -rf /home/*  
6、重新挂载/home  
mount -a  
最后,重启设备  

11.6 管理虚拟内存

处理文件和分区
* 交换分区是系统RAM的补充
* 基本设置包括:
 * 创建交换分区或者文件
 * 使用mkswap写入特殊签名,即使用该命令对swap分区进行格式化
 * 在/etc/fstab文件中添加适当的条目
 * 使用swapon-a 激活交换空间

知识扩展:
fstab文件中:
如果设备(分区)出错
centos6,fstab文件中最后一项非0,将导致系统无法启动
centos7,fstab文件中最后一项是否为0,系统都无法启动

挂载交换分区
* 启用:swapon
swapon[OPTION]… [DEVICE]
  -a:激活所有的交换分区
  -p PRIORITY:指定优先级
  -s:查看内存里swap信息,相当于cat /proc/swaps
/etc/fstab:pri=value
* 禁用:swapoff [OPTION]… [DEVICE]

swap的优先级
* 可以指定swap分区0到32767的优先级,值越大优先级越高
* 如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一
* 先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)
* 优化性能:分布存放,高性能磁盘存放

知识扩展:
1、增加swap分区大小
使用fdisk命令新建分区,并更改分区id为82
创建文件系统时使用mkswap 分区名
将更改写入/etc/fstab配置文件
swapon -a 使fstab表swap挂载立即生效
2、去掉新增的swap分区
swapoff 禁用swap分区
删除fstab表中swap挂载信息
删除swap分区

实验:增加分区或文件充当swap分区

创建需求大小的文件
dd if=/dev/zero if=swapfile bs=1G  count=10
创建swap文件系统
mkswap  /swapfile
写入fstab表
/swapfile   swap  swap  defaults  0  0
激活fstab表
swapon -a   出于安全考虑,把/swapfile文件权限设置为600,即不允许别人对该文件进行写操作

移动介质
* 挂载意味着使外来的文件系统看起来如同是主目录树的一部分
* 访问前、介质必须被挂载
* 摘除时,介质必须被卸载
* 按照默认设置,非根用户只能挂载某些设备(光盘、DVD、软盘、USB等等)
* 挂载点通常在/media 或/mnt下

使用光盘
* 在图形环境下自动启动挂载/run/media
* 否则就必须被手工挂载
  mount /dev/cdrom/mnt/
* eject命令卸载或弹出磁盘
* 创建ISO文件
  cp /dev/cdrom /root/centos7.iso
  mkisofs -r -o /root/etc.iso /etc
* 刻录光盘
  wodim–v –eject centos.iso

挂载USB介质
* 查看USB设备是否识别
  lsusb
* 被内核探测为SCSI设备
  /dev/sdaX、/dev/sdbX、或类似的设备文件
* 在图形环境中自动挂载
  图标在[计算机]窗口中创建
  挂载在/run/media
* 手动挂载
  mount /dev/sdb1 /mnt

常见工具
* 文件系统空间占用等信息的查看工具:
df [OPTION]… [FILE]…
  -H:查看分区信息,大小以10^3来计算
  -T:文件系统类型
  -h: 查看分区信息,大小以2^10来计算
  -i:inodesinstead of blocks,节点数使用情况
  P: 对于长格式文件名,以常规方式显示;如果文件名过长,一行会错行变成两行显示,加上-P则会恢复成一行显示

df -Th组合选项示例:

[root@centos7 ~]#df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/sda2      xfs        50G  5.1G   45G  11% /
devtmpfs       devtmpfs  731M     0  731M   0% /dev
tmpfs          tmpfs     747M     0  747M   0% /dev/shm
tmpfs          tmpfs     747M   11M  736M   2% /run
tmpfs          tmpfs     747M     0  747M   0% /sys/fs/cgroup
/dev/sda3      xfs        30G   33M   30G   1% /data
/dev/sda1      xfs      1014M  155M  860M  16% /boot
tmpfs          tmpfs     150M   12K  150M   1% /run/user/42
tmpfs          tmpfs     150M     0  150M   0% /run/user/0
/dev/sdb1      ext4      4.8G   20M  4.6G   1% /mnt/sdb1

df -P 选项示例:

[root@centos6 ~]#df
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/sda2             51475068 4520936  44332692  10% /
tmpfs                   501508      72    501436   1% /dev/shm
/dev/sda1               999320   34120    912772   4% /boot
/dev/sda3             30832636   44996  29214776   1% /data
/dev/sr0               3897932 3897932         0 100% /mnt/cdrom
/root/Centos-6-x86_64-Everything-1804.iso
                       3897932 3897932         0 100% /mnt/iso

[root@centos6 ~]#df -P
Filesystem                                1024-blocks    Used Available Capacity Mounted on
/dev/sda2                                    51475068 4520936  44332692      10% /
tmpfs                                          501508      72    501436       1% /dev/shm
/dev/sda1                                      999320   34120    912772       4% /boot
/dev/sda3                                    30832636   44996  29214776       1% /data
/dev/sr0                                      3897932 3897932         0     100% /mnt/cdrom
/root/Centos-6-x86_64-Everything-1804.iso     3897932 3897932         0     100% /mnt/is
  • 查看某目录总体空间占用状态:
    du 查看文件大小,列出当前目录下每个子目录的大小,文件大小单位为k,默认递归
    du [OPTION]… DIR
      -h: human-readable
      -s: summary
      –max-depth du命令默认递归,使用该选项指定层级

工具dd
* dd命令:复制或转换文件
* 用法:
  dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
  bs=#:block size, 复制单元大小
  count=#:复制多少个bs
* of=file 写到所命名的文件而不是到标准输出
if=file 从所命名文件读取而不是从标准输入
bs=size 指定块大小(既是是ibs也是obs)
ibs=size 一次读size个byte
obs=size 一次写size个byte
cbs=size 一次转化size个byte
skip=blocks 从开头忽略blocks个ibs大小的块
seek=blocks 从开头忽略blocks个obs大小的块
count=n 只拷贝n个记录
* conv=conversion[,conversion…] 用指定的参数转换文件
* 转换参数:
  ascii转换EBCDIC 为ASCII
  ebcdic转换ASCII 为EBCDIC
  lcase把大写字符转换为小写字符
  ucase把小写字符转换为大写字符
  nocreat不创建输出文件
  noerror出错时不停止
  notrunc不截短输出文件
  sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
* 备份MBR
  dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
* 破坏MBR中的bootloader:
  dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446
* 从fileA读取数据128byte写入fileB,从fileA读取数据时,跳过前63byte开始读取;写入fileB时,跳过前31byte开始写入,并且当fileA向fileB文件写入数据结束后,fileB文件内容不会被截断,实现如下:
  dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc

[root@centos7 ~]#cat f1 f2
12345678
abcdefghijk
[root@centos7 ~]#dd if=/root/f1 of=/root/f2  bs=1 count=2 skip=3  seek=5
2+0 records in
2+0 records out
2 bytes (2 B) copied, 0.000197129 s, 10.1 kB/s
[root@centos7 ~]#cat f2
abcde45
[root@centos7 ~]#dd if=/root/f1 of=/root/f2  bs=1 count=2 skip=3  seek=5 conv=notrunc
2+0 records in
2+0 records out
2 bytes (2 B) copied, 0.000182165 s, 11.0 kB/s
[root@centos7 ~]#cat f2
abcde45hijk
  • 备份:
    dd if=/dev/sdx of=/dev/sdy
    将本地的/dev/sdx整盘备份到/dev/sdy
    dd if=/dev/sdx of=/path/to/image
    将/dev/sdx全盘数据备份到指定路径的image文件
    dd if=/dev/sdx| gzip>/path/to/image.gz
    备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径
  • 恢复:
    dd if=/path/to/image of=/dev/sdx
    将备份文件恢复到指定盘
    gzip-dc /path/to/image.gz | dd of=/dev/sdx
    将压缩的备份文件恢复到指定盘
  • 拷贝内存资料到硬盘
    dd if=/dev/mem of=/root/mem.binbs=1024
    将内存里的数据拷贝到root目录下的mem.bin文件
  • 从光盘拷贝iso镜像
    dd if=/dev/cdrom of=/root/cd.iso
    拷贝光盘数据到root文件夹下,并保存为cd.iso文件
  • 销毁磁盘数据
    dd if=/dev/urandom of=/dev/sda1
    利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据,执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行
  • 得到最恰当的block size
    dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
    dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
    dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
    通过比较dd指令输出中命令的执行时间,即可确定系统最佳的block size大小
  • 测试硬盘写速度
    dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
  • 测试硬盘读速度
    dd if=/root/1Gb.file bs=64k | dd of=/dev/null
  • 修复硬盘
    dd if=/dev/sda of=/dev/sda
    当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生,且这个过程是安全高效的

猜你喜欢

转载自blog.csdn.net/u013168176/article/details/81840006