Linux磁盘管理及文件系统


1、Linux磁盘管理
 
识别硬盘设备:/dev/sd
 
标记不同的硬盘设备:/dev/sd[a-z]
 
标记同一设备上的不同分区:/dev/sd[a-z][1-]
 
1-4: 主或扩展分区标识
 
5+:逻辑分区标识
 
 
 
2、设备文件:特殊文件
 
设备号:
 
  major, minor
 
  major: 设备类型
 
  minor: 同一类型下的不同设备
 
  “块”:block,随机设备
 
  “字符”:character,线性设备
 
 
 
3、分区工具:
 
(1)fdisk, parted, sfdisk  
 
注:最多支持在一块硬盘上的15个分区;
 
fdisk工具的使用:
 
分区管理交互式命令:
 
  p: 显示
 
  n: 创建
 
  d: 删除
 
  t: 修改分区ID
 
  l: 列出所有支持ID类型
 
  w: 保存退出
 
  q: 放弃修改并退出
 
  m: 获取帮助
 
 
 
(2)创建完成之后,查看内核是否已经识别新的分区:
 
  # cat /proc/partitions
 
 
 
例子:
 
[root@localhost ~]# cat /proc/partitions
major minor  #blocks  name
 
8  0  125829120 sda
8  1  512000 sda1
8  262423040 sda2
8  3 2097152 sda3
 253  041447424 dm-0
 253  110485760 dm-1
 253  210485760 dm-2
 
 
 
 
(3)有三个命令可以让内核重读磁盘分区表:
 
  CentOS 5: partprobe [DEVICE]
 
  CentOS 6,7: 
 
  partx
 
  kpartx
 
 
 
  partx命令:
 
 partx DEVICE
 
 partx -a DEVICE
 
 partx -a -n M:N DEVICE
 
 
 
  kpartx命令:
 
 kpartx -af DEVICE
 
 
 
例子:
 
[root@localhost ~]# partx -a /dev/sda
[root@localhost ~]# cat /proc/partitions
major minor  #blocks  name
 
8  0  125829120 sda
8  1  512000 sda1
8  262423040 sda2
8  3 2097152 sda3
8  431 sda4
8  510488317 sda5
8  620980858 sda6
 253  041447424 dm-0
 253  110485760 dm-1
 253  210485760 dm-2
[root@localhost ~]# ls /dev/sda
sdasda1  sda2  sda3  sda4  sda5  sda6
 
 
4、Linux文件系统管理
 
(1)文件系统:
 
VFS:Virtual File System
 
  Linux:ext2, ext3, ext4, reiserfs, xfs, btrfs, swap
 
  光盘:iso9660
 
  Windows: fat32(vfat), ntfs
 
  Unix: ffs, ufs, jfs, jfs2
 
  网络文件系统:nfs, cifs
 
  集群文件系统:ocfs2, gfs2
 
  分布式文件系统:ceph, 
 
  moosefs, mogilefs, hdfs, gfs, glusterfs
 
 
 
(2)日志型文件系统
 
非日志型文件系统:ext2
 
日志型文件系统:ext3
 
 
 
(3)swap:交换分区
 
 
 
 
 
5、创建文件系统:
 
在分区上执行格式化(高级格式化)
 
要使用某种文件系统,满足两个条件:
 
内核中:支持此种文件系统
 
用户空间:有文件系统管理工具
 
 
 
(1)创建工具:mkfs (make filesystem)
 
mkfs -t type DEVICE
 
mkfs.type DEVICE
 
 
 
(2)ext系列文件系统的专用管理工具:
 
mke2fs -t {ext2|ext3|ext4} DEVICE
 
  -b BLOCK: 1024, 2048, 4096
 
  -L ‘LABEL‘: 设定卷标
 
 
 
(3)blkid命令:
 
UUID---Universally Unique Identifiers
 
全局唯一标识符:
 
 blkid DEVICE
 
  LABEL, UUID, TYPE
 
 
 
例子:
 
[root@localhost ~]# blkid /dev/sda1
/dev/sda1: UUID="dbde3019-886c-4eb3-8a79-b15825f7f929" TYPE="ext4"
6、Linux文件系统管理:
 
(1)创建文件系统:
 
mkfs, mkfs -t type = mkfs.type
 
ext:mke2fs 
 
mke2fs [OPTION]... DEVICE
 
  -t {ext2|ext3|ext4}
 
  -b {1024|2048|4096}
 
  -L ‘LABEL‘
 
  -j: mke2fs -t ext3
 
  -i #:
 
  -N #:
 
  -m #: 预留磁盘空间占据多大百分比的空间为后期管理使用;
 
  O FEATURE[,...]
 
  -O ^FEATURE:关闭此特性
 
  has_journal
 
 
 
(2)文件系统属性查看及调整工具:
 
e2label #不影响分区中的数据
 
e2lable DEVICE [LABEL]
 
 
 
(3)显示ext系列文件系统的属性,或调整其属性;
 
tune2fs #不影响分区中的数据
 
  -l:显示超级块中的信息;显示整个文件的属性及布局等相关信息;
 
  -L ‘LABEL‘:修改卷标;
 
  -m #: 调整预留给管理员的管理空间百分比;
 
  -j: ext2 --> ext3
 
  -O:文件系统属性的启动或关闭 
 
  -o:文件系统默认挂载选项的启用或关闭
 
 
 
(4)dumpe2fs:
 
  -h: 仅显示超级块信息;
 
 
 
例子:
 
[root@localhost ~]# mke2fs -L lisir -t ext4 /dev/sda5
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655776 inodes, 2622079 blocks
131103 blocks (5.00%) reserved for the super user
........
 
[root@localhost ~]# tune2fs -o acl /dev/sda5  #开启acl
tune2fs 1.41.12 (17-May-2010)
[root@localhost ~]# tune2fs -L lisir01 /dev/sda5  #修改卷标
tune2fs 1.41.12 (17-May-2010)
[root@localhost ~]# tune2fs -l /dev/sda5  #查看分区信息
tune2fs 1.41.12 (17-May-2010)
Filesystem volume name:lisir01
Last mounted on: <not available>
Filesystem UUID: 1d305c60-761e-447e-b585-6c2416d13228
Filesystem magic number:  0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features:has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:signed_directory_hash
Default mount options: acl
 
 
7、文件系统检测:
 
注:由于硬盘常年读写,系统会造成系统文件损坏,导致重启后无法登陆到系统,fsck不仅可以对文件系统进行扫描,还能修正文件系统的一些问题。值得注意的是fsck扫描文件系统时一定要在单用户模式、修复模式或把设备umount后进行。
 
(1)fsck: Filesystem check
 
fsck -t type
 
fsck.type
 
  -a: 自动修复错误
 
  -r: 交互式修复错误
 
  -f: 强制检测
 
 
 
(2)e2fsck:ext系列文件系统专用的检测修复工具;
 
  -y: 自动回答为“yes”
 
  f:force
 
 
 
(3)文件系统的挂载和使用:
 
kernel --> rootfs(分区)
 
rootfs分区:
 
bin, sbin, etc, lib, lib64, dev, tmp, proc, sys
 
/sbin/init
 
将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件系统访问 入口的行为,称之为挂载;
 
解除此关联关系的过程:卸载;
 
挂载点:mount point, 设备挂载至目录;
 
注意:挂载点在挂载在之后,其内部原有的文件会被暂时隐藏;建立使用空目录做为挂载点;
 
 
 
例子:
 
[root@localhost ~]# fsck.ext4 -a /dev/sda5  #自动修复sda5磁盘错误
lisir01: clean, 11/655776 files, 79700/2622079 blocks
[root@localhost ~]# fsck.ext4 -f /dev/sda5  #强制检测磁盘sda5
e2fsck 1.41.12 (17-May-2010)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
lisir01: 11/655776 files (0.0% non-contiguous), 79700/2622079 blocks
8、挂载方法:
 
mount:通过读取/etc/mtab文件来显示当前系统所有已经挂载的设备;
 
mount -a:挂载/etc/fstab文件中的所有支持自动挂载的文件系统;
 
 
 
mount [options] [-o options] DEVICE MOUNT_POINT
 
  [options]:命令选项
 
  [-o options]:挂载选项
 
 
 
-o 挂载选项:
 
  async:异步模式
 
  sync: 同步模式
 
  atime/noatime:是否更新访问时间戳;
 
  diratime/nodiratime:是否更新目录的访问时间戳;
 
  auto/noauto: 是否允许此设备被自动挂载;
 
  exec/noexec:是否允许执行此文件系统上应用程序;
 
  dev/nodev:是否支持在此设备上使用设备文件;
 
  suid/nosuid:
 
  remount:重新挂载
 
  ro
 
  rw
 
  user/nouser: 是否允许普通挂载此设备;
 
  acl:是否支持此设备上使用facl;
 
  defaults:rw, suid, dev, exec, auto, nouser, and async
 
 
 
DEVICE: 要挂载的设备
 
  (1) 设备文件:/dev/sda5
 
  (2) 卷标:-L ‘LABEL‘
 
  (3) UUID:-U ‘UUID‘
 
  (4) 伪文件系统名称
 
 
 
MOUNT_POINT: 挂载点
 
  常用选项:
 
  -t type:文件系统类型
 
  -r: 以“只读”方式挂载此文件系统
 
  -w: 以“读写”方式挂载此文件系统
 
  -n:每个文件系统在挂载时都会自动更新/etc/mtab文件,-n用于禁止此功能;
 
  此时,如果想查看挂载的所有文件系统:cat /proc/mounts
 
  -a: 自动挂载所有支持自动挂载的设备;
 
  -B:绑定目录至另一个目录上;
 
 
 
umount:卸载命令
 
  # umount DEVICE
 
  # umount MOUNT_POINT
 
 
 
查看正在访问指定挂载点的进程:
 
  # fuser -v MOUNT_POINT
 
 
 
终止所有正在访问指定的挂载点的进程:
 
  # fuser -km MOUNT_POINT
 
 
 
例子:
 
[root@localhost ~]# umount /mydata/
umount: /mydata: device is busy.
  (In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[root@localhost ~]# fuser -v /mydata/
用户  进程号 权限命令
/mydata/:root 3764 ..c.. bash
[root@localhost ~]# fuser -km /mydata/
/mydata/: 3764c
[root@localhost ~]# umount /mydata/
 
 
9、交换分区:
 
(1)free命令:
 
查看memory和swap的使用状态
 
  -m: 以MB为单位
 
  -g: 以GB为单位 
 
 
 
(2)mkswap:创建交换分区
 
mkswap [option] DEVICE
 
  -L ‘LABEL‘
 
 
(3)swapon:启用交换分区
 
swapon [option] [DEVICE]
 
  -a: 激活所有交换分区
 
  -p PRIORITY: 设定其优先级;
 
 
 
(4)swapoff:禁用交换分区
 
swapoff [option] [DEVICE]
 
 
 
例子:
 
[root@localhost ~]# mkswap -L swap01 /dev/sda6
Setting up swapspace version 1, size = 20980852 KiB
LABEL=swap01, UUID=3835c7ba-8b9b-4047-931c-a19eed79d7c4
[root@localhost ~]# swapon -s
Filename  TypeSize Used Priority
/dev/sda3 partition 2097148 0 -1
[root@localhost ~]# swapon -a /dev/sda6
[root@localhost ~]# swapon -s
Filename  TypeSize Used Priority
/dev/sda3 partition 2097148 0 -1
/dev/sda6 partition 20980852  0 -2
[root@localhost ~]# free -m
 total used free  shared buffers  cached
Mem:  988  728  260 318  327
-/+ buffers/cache:  382  606
Swap:  22537 022537
 
 
10、文件系统等空间占用信息的查看工个:
 
(1)df: disk free
 
 -h: human-readable
 
 -i: inode数量
 
 -P: 以Posix兼容的格式输出
 
 
 
(2)du: disk usage
 
 -h: human-readable
 
 -s: summary
 
 
 
11、文件系统相关挂载配置文件:/etc/fstab
 
每行定义一个文件系统;
 
要挂载的设备:
 
  设备文件、LABEL=、UUID=、伪文件系统名称
 
挂载选项:
 
  defaults、acl
 
转储频率:
 
  0: 不转储
 
  1: 每天转储
 
  2: 每隔一天转储
 
自检次序:
 
  0:不自检
 
  1:首先自检,通常只有/才为1
 
  2:
 
 
 
12、文件系统上的链接文件:
 
硬链接:
 
两个路径指向同一个inode
 
不能对目录进行;
 
不能跨分区进行
 
指向同一个inode的多个不同路径; 创建文件的硬链接会增加inode的引用计数;删除硬链接仅是删除 其一个访问路径,只到最后一个路径被删除; 
 
 
 
符号链接:
 
链接文件的数据指向另一个文件路径;
 
可以对目录进行;
 
可以跨分区;
 
指向的是另一个文件路径;而非inode;
 
对文件创建符号链接不会增加其引用计数;删除原文件,符号链接文件也将无法;
 
ln [-s] SRC DEST
 
  -s:symbolic link 
 
  -v:verbose
 
 
 
例子:
 
[root@localhost ~]# ln -s /etc/fstab ./123
[root@localhost ~]# ll
总用量 100
lrwxrwxrwx. 1 root root 10 9月7 15:28 123 -> /etc/fstab
 

相关内容