感谢支持
我们一直在努力

文件系统入门知识

一、文件系统类型

  • Linux文件系统: ext2, ext3, ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap

  • 光盘:iso9660

  • Windows:fat32, ntfs

  • Unix: FFS(fast), UFS(unix), JFS2

  • 网络文件系统:NFS, CIFS

  • 集群文件系统:GFS2, OCFS2(oracle)

  • 分布式文件系统:ceph, moosefs, mogilefs, fastdfs,glusterfs, Lustre

  • RAW:未经处理或者未经格式化产生的文件系统

文件根据其是否支持“日志(journal)”功能可分为两类:

  • 有日志:ext3, ext4, xfs

  • 无日志:ext2

小贴士:日志文件系统:

一种文件系统,指在文件系统发生变化时,先把相关的信息写入一个被称为日志的区域,然后再把变化写入主文件系统的文件系统。在文件系统发生故障(如内核崩溃或突然停电)时,日志文件系统更容易保持一致性,并且可以较快恢复。

二、虚拟文件系统

虚拟文件系统也成为VFS。

VFS存在的意义:

  • 1.向上,对应用层提供一个标准的文件操作接口;

  • 2.对下,对文件系统提供一个标准的接口,以便其他操作系统的文件系统可以方便的移植到Linux上;

  • 3.VFS内部则通过一系列高效的管理机制,比如inode cache, dentry cache 以及文件系统的预读等技术,使得底层文件系统不需沉溺到复杂的内核操作,即可获得高性能;

  • 4.此外VFS把一些复杂的操作尽量抽象到VFS内部,使得底层文件系统实现更简单。

VFS架构图

9cdc53c43946406a.png

三、文件系统的组成

文件系统管理分两部分组成:

  • 文件系统内核模块:如 ext4, xfs, vfat…

  • 文件系统管理工具:如 mkfs.ext4, mkfs.xfs,mkfs.vfat…

查看当前系统支持的文件系统类型

[root@CentOS6 ~]# cat /proc/filesystems 
nodev   sysfs
nodev   rootfs
nodev   bdev
nodev   proc
...

四、文件系统选择

1、大量小文件(LOSF, Lost of small files)I/O应用(如小图片)

Reiserfs(首选), Ext4文件系统适合这类负载特征,IO调度算法选择deadline,block size = 4096, ext4关闭日志功能。

2、大文件I/O应用(如视频下载、流媒体)

EXT4文件系统适合此类负载特征,IO调度算法选择anticipatory, block size = 4096, 关闭日志功能,启用extent(default)。

3、SSD文件系统选择

EXT4/Reiserfs可以作为SSD文件系统,但未对SSD做优化,不能充分发挥SSD性能,并影响SSD使用时间。 Btrfs对SSD作了优化,mount通过参数启用。但Btrfs仍处于实验阶段,生产环境谨慎使用。

五、创建与管理文件系统

1.mkfs命令

格式:

mkfs -t <ext4|xfs|btrfs|vfat> /dev/DEVICE

常用选项:

-t FS_TYPE:指定文件系统类型
-L LABEL:指定卷标名称

实例:

[root@bash ~]# mkfs -t ext4 -L "YOUNG" /dev/sdb
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=YOUNG
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

2.mkfs.FS_TYPE命令

格式:

mkfs.FS_TYPE /dev/DEVICE

实例:

[root@bash ~]# mkfs.ext4 /dev/sdb
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb 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)
...

3.mke2fs命令

mke2fs专用于ext系列文件系统的创建于管理。

常用选项:

-t {ext2|ext3|ext4}:指定文件系统
-b {1024|2048|4096}: 指定块大小
-L LABEL:卷标,即分区名称
-j: 相当于“mke2fs -t ext3”
    mkfs -t ext3 = mke2fs -t ext3 = mke2fs -j = mke2fs -O has_journal
-i #: 为数据空间中的每多少字节创建一个inode;此字节数不应该小于块大小;比例关系;
-I: 一个inode记录大小128---4096
-N #:直接指定元数据区有多少个inode;
-m #: 指定为管理预留管理空间占据总空间的百分比;默认为5%
-O FEATURE[,...]:指定启用分区的某特殊特性
-O ^FEATURE:关闭指定特性
    -O has_journal:启用日志
    -O ^has_journal:关闭关闭

实例:

[root@bash ~]# mke2fs -t ext4 -b 4096 -L 'young'\
-i 4096 -N 100000 -I 128 -m 6 -O has_journal /dev/sdb
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=young
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
102400 inodes, 5242880 blocks
314572 blocks (6.00%) reserved for the super user
...

4.e2lablel命令

e2lablel命令用于卷标查看及管理。

格式:

e2label DEVICE [LABEL]

实例:

[root@bash ~]# e2label /dev/sdb
young
[root@bash ~]# e2label /dev/sdb "GEEK"
[root@bash ~]# e2label /dev/sdb
GEEK

5.blkid命令

blkid命令用于块设备属性信息显示。

格式:

blkid [OPTIONS] [DEVICE]

常用选项:

-U UUID: 列出某UUID对应的设备
-L LABEL: 列出使用此LABEL设备

实例:

[root@bash ~]# blkid 
/dev/sdb: LABEL="GEEK" UUID="2e564b3f-e542-4bef-aa88-d70935c5c5fb" TYPE="ext4" 
/dev/sr0: UUID="2015-12-09-22-36-30-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/sda1: UUID="812a29ec-11dd-4fa6-b373-c4b42fb80162" TYPE="xfs" 
/dev/sda2: UUID="3b67c557-763b-41f2-aff0-4810b0324128" TYPE="xfs" 
/dev/sda3: UUID="86e06c71-0806-4463-bf6d-490a28cb12b6" TYPE="xfs" 
/dev/sda5: UUID="431c5b57-a52d-4fcc-8845-f984c463b78f" TYPE="swap" 
[root@bash ~]# ^C
[root@bash ~]# blkid -U 2e564b3f-e542-4bef-aa88-d70935c5c5fb
/dev/sdb
[root@bash ~]# blkid /dev/sdb
/dev/sdb: LABEL="GEEK" UUID="2e564b3f-e542-4bef-aa88-d70935c5c5fb" TYPE="ext4" 
[root@bash ~]# blkid -L "GEEK" 
/dev/sdb

6.dumpe2fs命令

dumpe2fs用于ext系列文件系统的超级块信息查看。

格式:

dumpe2fs [OPTIONS] DEVICE

常用选项:

-h: 仅显示超级块信息

实例:

[root@CentOS6 ~]# dumpe2fs /dev/sda1
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>
Last mounted on:          /boot
Filesystem UUID:          23048871-a3fd-4d25-92da-5c39459bf7c6
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              51200
Block count:              204800
Reserved block count:     10240
Free blocks:              64456
Free inodes:              49329
First block:              1
Block size:               1024
Fragment size:            1024
Reserved GDT blocks:      256
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         2048
Inode blocks per group:   256
Flex block group size:    16
Filesystem created:       Tue Jul 19 19:11:41 2016
Last mount time:          Tue Jan 31 02:35:52 2017
Last write time:          Tue Jan 31 02:35:52 2017
Mount count:              143
Maximum mount count:      -1
Last checked:             Tue Jul 19 19:11:41 2016
Check interval:           0 (<none>)
Lifetime writes:          332 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      ac8bb143-702c-4f17-80fd-afda06b8763e
Journal backup:           inode blocks
Journal features:         journal_incompat_revoke
Journal size:             4096k
Journal length:           4096
Journal sequence:         0x000002a7
Journal start:            1


Group 0: (Blocks 1-8192) [ITABLE_ZEROED]
  Checksum 0x70bd, unused inodes 214
  Primary superblock at 1, Group descriptors at 2-2
  Reserved GDT blocks at 3-258
  Block bitmap at 259 (+258), Inode bitmap at 275 (+274)
  Inode table at 291-546 (+290)
  3545 free blocks, 216 free inodes, 229 directories, 214 unused inodes
  Free blocks: 4648-8192
  Free inodes: 34, 1834-2048
...

innode与超级块关系图:

7ed1504eefb36427.png

超级块:超级块(superblock)的作用是存储文件系统的大小、有多少是空的和已经填满的占多少,以及他们各自的总数和其他诸如此类的信息。要使用一个分区来进行数据访问,那么第一个要访问的就是超级块。所以,超级块坏了,那磁盘也就基本没救了。

超级块占用1号物理块,就是文件系统的控制块,超级块包括:文件系统的大小、空闲块数目、空闲块索引表、空闲i节点数目、空闲i节点索引表、封锁标记等。超级块是系统为文件分配存储空间、回收存储空间的依据。

所以为了防止超级块数据损坏,就需要对超级块数据进行备份,以便于损坏时可以修复。

  • indoe bitmap (indoe对照表): 用来记录当前文件系统的indoe哪些是已经使用的,哪些又是未使用的。

  • block bitmap (块对照表): 用来记录当前文件系统哪些block已经使用,哪些又是未使用的。

  • inode table (inode 表格):inode是用来记录文件的属性以及该文件实际数据所在的block的号码。

  • GDT(Global Descriptor Table):用来描述每个block group开始和结束的block号码以及每个区段位于哪一个block号码之间。相当于文件系统描述的是每个block group的信息。

  • data blocks:数据块,用于存放数据

7.tune2fs命令

tune2fs用于重新设定可ext系统文件系统中的可调整参数。

格式:

tune2fs [OPTIONS] DEVICE

常用选项:

-l: 查看指定文件系统的超级块信息
-L LABEL:设定卷标
-m #: 调整为管理员预留空间的百分比
-j: 用于为ext2文件系统 添加ext3格式的日志,提升ext2为ext3
-O: 文件系统属性的打开或关闭,–O ^has_journal
-o: 调整文件系统挂载的默认属性(文件系统挂载属性的开启或关闭),–o ^acl
-U UUID:设定指定文件系统的UUID;

实例:

[root@bash ~]# tune2fs -l /dev/sdb #列出超级块信息,相当于dumpe2fs -h
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   GEEK
Last mounted on:          <not available>
Filesystem UUID:          2e564b3f-e542-4bef-aa88-d70935c5c5fb
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              102400
...

[root@bash ~]# tune2fs -L "H" /dev/sdb #设定卷标
tune2fs 1.42.9 (28-Dec-2013)
[root@bash ~]# e2label /dev/sdb  
H

[root@bash ~]# blkid /dev/sdb
/dev/sdb: UUID="6ce61834-a56c-4367-bce3-953d05f5f4bc" TYPE="ext2" 
[root@bash ~]# tune2fs -j /dev/sdb   #增加日志,提升为ext3
tune2fs 1.42.9 (28-Dec-2013)
Creating journal inode: done
[root@bash ~]# blkid /dev/sdb     
/dev/sdb: UUID="6ce61834-a56c-4367-bce3-953d05f5f4bc" SEC_TYPE="ext2" TYPE="ext3" 

[root@bash ~]# tune2fs -o ^acl /dev/sdb

[root@bash ~]# uuidgen
5272519a-039a-4bf0-817a-6014daec5e15
[root@bash ~]# tune2fs -U 5272519a-039a-4bf0-817a-6014daec5e15 /dev/sdb #修改uuid
tune2fs 1.42.9 (28-Dec-2013)
[root@bash ~]# blkid -U 5272519a-039a-4bf0-817a-6014daec5e15
/dev/sdb

8.findfs命令

findfs命令用于根据卷标或者UUID查找设备

格式:

findfs [OPTIONS] UUID=<uuid>
findfs [OPTIONS] LABEL=<label>

实例:

[root@bash ~]# e2label /dev/sdb "YOUNG"
[root@bash ~]# e2label /dev/sdb
YOUNG
[root@bash ~]# blkid /dev/sdb
/dev/sdb: LABEL="YOUNG" UUID="5272519a-039a-4bf0-817a-6014daec5e15" SEC_TYPE="ext2" TYPE="ext3" 
[root@bash ~]# findfs UUID="5272519a-039a-4bf0-817a-6014daec5e15"
/dev/sdb
[root@bash ~]# findfs LABEL="YOUNG"
/dev/sdb

更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2017-02/140307p2.htm

六、文件系统检测和修复

因进程意外中止或系统崩溃等情况导致定稿非正常中止时,可能会导致文件损坏;此时,应该修复文件系统。

  • 常发生于死机或者非正常关机之后

  • 挂载为文件系统标记为“ no clean”

  • 一定不要在挂载状态下修复

1.fsck命令:file system check

常用选项:

-t FS_TYPE:指定文件系统类型,相应地确定调用哪一个修复工具
-a: 自动修复错误
-r: 交互式修复错误

实例:

[root@bash ~]# blkid /dev/sdb
/dev/sdb: LABEL="YOUNG" UUID="5272519a-039a-4bf0-817a-6014daec5e15" SEC_TYPE="ext2" TYPE="ext3" 
[root@bash ~]# fsck -t ext3 -a /dev/sdb
fsck from util-linux 2.23.2
YOUNG: clean, 11/1310720 files, 126322/5242880 blocks

2.e2fsck命令

专用于ext系列文件系统检测与修复。

常用选项:

-y:自动回答为yes
-f:强制修复

实例:

[root@bash ~]# e2fsck -y -f /dev/sdb
e2fsck 1.42.9 (28-Dec-2013)
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
YOUNG: 11/1310720 files (0.0% non-contiguous), 126322/5242880 blocks

七、文件系统挂在与卸载

将额外的文件系统与根文件系统上现存的目标建立关联关系,进而使得其作为此额外文件系统访问入口的操作过程即为挂载;拆除此关联关系的操作过程卸载。

挂载位置:挂载点,mount point

固定挂载点:/mnt, /media

文件系统挂载后,挂载点下原有的文件将会被临时隐藏;卸载后,隐藏的文件会再次出现;

挂载方法:# mount DEVICE MOUNT_POINT

1.mount命令

格式:

mount [OPTIONS] [-t FS_TYPE] [-o MOUNT_OPTION] DEVICE MOUNT_POINT

说明:

DEVICE:

  • (1) 设备文件,如/dev/sdb1;

  • (2) 卷标,-L LABEL,例如-L MYDATA;

  • (3) UUID, -U UUID,例如-U 3a96edc3-da29-462f-9ca8-14690b5fdd89;

MOUNT_POINT:事先存在;建议使用空闲目录;

常用的命令选项:

-t FS_TYPE: 指定文件系统类型;
-r: read only,只读挂载;
-w: read and write,读写挂载;
-L LABEL:以LABEL格式指定要挂载的设备;
-U UUID:以UUID格式指定要挂载的设备;
-a: 自动挂载所有(/etc/fstab)支持自动挂载(挂载选项auto)的文件系统
-n: 挂载时,不更新/etc/mtab文件;
-B, --bind:关联目录

实例:

[root@bash ~]# mount -t ext3 -w /dev/sdb /mnt

常用的挂载选项:-o MOUNT_OPTION

async: 使用异步模式;数据的修改操作先于内存中完成,而后根据某策略定期同步至磁盘中实现持久存储;
sync: 同步
atime/noatime:对文件和目录都有效;
diratime/nodiratime:仅对目录有效;
auto/noauto: 设定是否支持mount的-a选项实现自动挂载;
dev/nodev:是否支持在此设备使用设备文件;
exec/noexec: 是否允许执行此设备上的二进制程序;
suid/nosuid:是否允许在此设备上的文件上使用suid;
remount:重新挂载
ro: 只读
rw: 读写
user/nouser:是否允许普通用户挂载设备
acl: 在此设备启用facl的功能,默认为不支持

挂在本地回环设备:

mount -o loop /PATH/TO/FILE MOUNT_POINT

实例:

[root@bash ~]# mount -o loop ./archlinux-2016.04.01-dual.iso /root/test/
mount: /dev/loop0 is write-protected, mounting read-only
[root@bash ~]# ls test/
arch  EFI  isolinux  loader

重新挂载已经挂载过的文件系统以支持其它挂载选项:

mount -o remount,... DEVICE [MOUNT_POINT]

实例:

[root@bash ~]# mount -t ext3 -o remount,acl,rw /dev/sdb /mnt

挂载目录到目录:

 

[root@bash ~]# mount --bind vimrc/ test/
[root@bash ~]# ls test/
spf13-vim
[root@bash ~]# ls vimrc/
spf13-vim
[root@bash ~]# umount test/
[root@bash ~]# ls test/
httpd-2.4.6-40.el7.CentOS.x86_64.rpm
httpd-devel-2.4.6-40.el7.centos.x86_64.rpm
httpd-manual-2.4.6-40.el7.centos.noarch.rpm
httpd-tools-2.4.6-40.el7.centos.x86_64.rpm
repodata

2.查看已经挂载的所有设备:

# mount
# cat /etc/mtab
# cat /proc/mounts

3.umount命令

umount命令用来卸载已经挂在设备。

格式:

umount DEVICE
umount MOUNT_POINT

实例:

[root@bash ~]# umount /mnt
[root@bash ~]# umount /dev/sdb

4.fuser、findmnt、lsof命令

查看有哪些进程正在访问指定挂载点:

# fuser -v MOUNT_POINT
#lsof MOUNT_POINT

强行中止正在使用此挂载点的进程:

# fuser -km MOUNT_POINT

查看挂载情况:

#findmnt MOUNT_POINT

实例:

[root@bash ~]# fuser -v /media/centos7-mirror/
                     USER        PID ACCESS COMMAND
/media/centos7-mirror:
                     root     kernel mount /media/centos7-mirror
[root@bash ~]# ls /media/centos7-mirror/
CentOS_BuildTag  GPL       LiveOS    RPM-GPG-KEY-CentOS-7
EFI              images    Packages  RPM-GPG-KEY-CentOS-Testing-7
EULA             isolinux  repodata  TRANS.TBL
[root@bash ~]# fuser -km /media/centos7-mirror/

[root@bash ~]# findmnt /media/centos7-mirror 
TARGET                SOURCE   FSTYPE  OPTIONS
/media/centos7-mirror /dev/sr0 iso9660 ro,relatime

5.df命令

df命令用于文件系统空间占用等信息查看。

常用选项:

-h: human-readable
-i: 显示inode使用率而非默认的磁盘空间使用率
-T: 文件系统类型
-P: 以Posix兼容的格式输出

实例:

[root@bash ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        20G 1022M   19G   5% /
devtmpfs        475M     0  475M   0% /dev
tmpfs           489M   76K  489M   1% /dev/shm
tmpfs           489M   50M  440M  11% /run
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/sda3        20G  2.9G   18G  15% /usr
/dev/sda1       509M  154M  355M  31% /boot
tmpfs            98M   44K   98M   1% /run/user/0
/dev/sr0        7.3G  7.3G     0 100% /media/centos7-mirror

[root@bash ~]# df -i
Filesystem       Inodes IUsed    IFree IUse% Mounted on
/dev/sda2      20971520 10907 20960613    1% /
devtmpfs         121535   391   121144    1% /dev
tmpfs            125166     4   125162    1% /dev/shm
tmpfs            125166   524   124642    1% /run
tmpfs            125166    13   125153    1% /sys/fs/cgroup
/dev/sda3      20971520 91748 20879772    1% /usr
/dev/sda1        524288   330   523958    1% /boot
tmpfs            125166    12   125154    1% /run/user/0
/dev/sr0              0     0        0     - /media/centos7-mirror

[root@CentOS6 ~]# df -T
Filesystem     Type  1K-blocks    Used Available Use% Mounted on
/dev/sda3      ext4   49207096 7511820  39188988  17% /
tmpfs          tmpfs   1536304       0   1536304   0% /dev/shm
/dev/sda1      ext4     194241  129785     54216  71% /boot

6.du命令

du命令用于某目录树占用空间的情况。

格式:

du [OPTIONS] /PATH/TO/DIR

常用选项:

-s: sumary, display only a total for each argument
-h: human-readable
--apparent-size FILE:显示文件自身大小而非占用磁盘空间

实例:

[root@bash ~]# du /etc/httpd/
40      /etc/httpd/conf
16      /etc/httpd/conf.d
28      /etc/httpd/conf.modules.d
84      /etc/httpd/
[root@bash ~]# du -sh /etc/httpd/
84K     /etc/httpd/
[root@bash ~]# du --apparent-size image
395964  image

八、文件系统的配置文件: /etc/fstab

1.文件格式:

设备 挂载点 文件系统 挂载选项 转储频率 自检次序

2.格式说明:

1)设备:设备文件、LABLE=”lable”、UUID=”uuid”、伪文件系统名称

2).挂载点:空闲或专用的目录路径

3).文件系统:指定文件系统类型ext2,ext3,ext4,xfs等

4).挂载选项:defaults: rw, suid, dev, exec, auto, nouser, async, and relatime额外补充其它选项,例如acl,写作“defaults,acl”

5).转储频率(备份频率):能否被dump备份命令作用:dump是一个用来作为备份的命令。通常这个参数的值为0或者1

  • 0:不做备份;

  • 1:每天备份;

  • 2:每隔一天;

6).自检次序:是否检验扇区:开机的过程中,系统默认会以fsck检验我们系统是否为完整(clean)。

  • 0:不自检

  • 1:首先自检;通常只根文件系统可设定为第一自检次序;

  • 2:次级自检,不同设备可以使用同一个自检顺序

九、处理交换文件和分区

交换分区有优先级;性能好的给予较高的优先级;性能一样时使用同等优先级,此时能实现负载均衡的效果;

1.swapon命令

格式:

swapon [OPTIONS] [DEVICE]

常用参数:

-p PRIORITY: 指定优先级,可以指定swap分区0到32767的优先级,
             值越大优先级越高,不指定先添加的swap的缺省优先级比较高              

-a: 启用所有的交换分区

2.关闭交换分区:

swapoff

常用参数:

-a:关闭所有交换分区

3.内存空间空闲及使用状态报告: free

常用参数:

-h:适合阅读形式展现     
-m: 以MB为单位;
-g: 以GB为单位

实例:

[root@CentOS6 ~]# lsblk   #寻找82交换分区设备
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1  3.7G  0 rom  
sda             8:0    0   50G  0 disk 
├─sda1          8:1    0  200M  0 part /boot
├─sda2          8:2    0    2G  0 part 
└─sda3          8:3    0 47.8G  0 part /
sdb             8:16   0   50G  0 disk 
└─sdb1          8:17   0   50G  0 part 
sdc             8:32   0   20G  0 disk 
├─sdc1 (dm-0) 253:0    0  9.2G  0 part 
└─sdc2 (dm-1) 253:1    0  3.9G  0 part 
[root@CentOS6 ~]# swapon /dev/sda2 #打开交换分区
[root@CentOS6 ~]# free -h
             total       used       free     shared    buffers     cached
Mem:          2.9G       1.9G       1.0G       272K       198M       1.5G
-/+ buffers/cache:       245M       2.7G
Swap:         2.0G         0B       2.0G
[root@CentOS6 ~]# swapoff /dev/sda2  #关闭交换分区
[root@CentOS6 ~]# free -h          
             total       used       free     shared    buffers     cached
Mem:          2.9G       1.9G       1.0G       272K       198M       1.5G
-/+ buffers/cache:       244M       2.7G
Swap:           0B         0B         0B     #关闭后交换分区显示为0

:在fstab文件中开机自动挂载交换分区挂载点不存在,要写为none

十、光盘及移动介质

1.卸载或弹出磁盘

eject

2.创建ISO文件

cp /dev/cdrom /root/centos7.iso
mkisofs -r -o /root/etc.iso /etc

3.刻录光盘

wodim –v –eject centos.iso

十一、dd工具使用说明

(一)、dd命令的解释

dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

注意:指定数字的地方若以下列字符结尾则乘以相应的数字:b=512;c=1;k=1024;w=2

常用参数:

if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >

of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >

ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。

obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。

bs=bytes:同时设置读入/输出的块大小为bytes个字节。

skip=blocks:从输入文件开头跳过blocks个块后再开始复制。

seek=blocks:从输出文件开头跳过blocks个块后再开始复制。

注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。

count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。

(二)、dd应用实例

1.将本地的/dev/hdb整盘备份到/dev/hdd

dd if=/dev/hdb of=/dev/hdd

2.将/dev/hdb全盘数据备份到指定路径的image文件

dd if=/dev/hdb of=/root/image

3.将备份文件恢复到指定盘

dd if=/root/image of=/dev/hdb

4.备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径

dd if=/dev/hdb | gzip > /root/image.gz

5.将压缩的备份文件恢复到指定盘

gzip -dc /root/image.gz | dd of=/dev/hdb

6.备份磁盘开始的512个字节大小的MBR信息到指定文件

dd if=/dev/hda of=/root/image count=1 bs=512

count=1指仅拷贝一个块;bs=512指块大小为512个字节。

恢复:dd if=/root/image of=/dev/hda

7.拷贝内存内容到硬盘

dd if=/dev/mem of=/root/mem.bin bs=1024 (指定块大小为1k)

8.拷贝光盘内容到指定文件夹,并保存为cd.iso文件

dd if=/dev/cdrom of=/root/cd.iso

9.增加swap分区文件大小

第一步:创建一个大小为256M的文件:

dd if=/dev/zero of=/swapfile bs=1024 count=262144

第二步:把这个文件变成swap文件:

mkswap /swapfile

第三步:启用这个swap文件:

swapon /swapfile

第四步:编辑/etc/fstab文件,使在每次开机时自动加载swap文件:

/swapfile    swap    swap    default   0 0

10.销毁磁盘数据

 dd if=/dev/urandom of=/dev/hda1

注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。

11.测试硬盘的读写速度

 dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file

 dd if=/root/1Gb.file bs=64k | dd of=/dev/null

通过以上两个命令输出的命令执行时间,可以计算出硬盘的读、写速度。

12.确定硬盘的最佳块大小:

 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 if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file

通过比较以上命令输出中所显示的命令执行时间,即可确定系统最佳的块大小。

13.修复硬盘:

 dd if=/dev/sda of=/dev/sda 或dd if=/dev/hda of=/dev/hda

当硬盘较长时间(一年以上)放置不使用后,磁盘上会产生magnetic flux point,当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。并且这个过程是安全、高效的。

/dev/null和/dev/zero的区别

/dev/null——它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。 /dev/zero——该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。

14.备份MBR:

dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

15.破坏MBR中的分区表

dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-02/140307.htm

赞(0) 打赏
转载请注明出处:服务器评测 » 文件系统入门知识
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏