磁盘管理

1、设备文件

设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信

设备号码:

主设备号major number,标识设备类型

次设备号minor number,标识同一类型下的不同设备

[root@localhost ~]# ll /dev/sd*

brw-rw—-. 1 root disk 8,  0 Aug 25 09:04 /dev/sda

brw-rw—-. 1 root disk 8,  1 Aug 25 09:04 /dev/sda1

brw-rw—-. 1 root disk 8,  2 Aug 25 09:04 /dev/sda2

其中8是主设备号,0/1/2分别是次设备号

2、硬盘存储术语

head:磁头

track:磁道

cylinder: 柱面

secotr: 扇区,512bytes

整个磁盘:512*63*1024*256=一个磁道63个扇区,一个盘片盘面1024个磁道,256个磁头即是256个盘面

一个柱面:512*63*256

Centos6.8是按柱面为单位划分分区

centos7.2是按照扇区为单位划分分区大小,但用命令fdisk的-u=cylinders选项可查按柱面为单位分区情况

3、MBR分区

1)、MBR: Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T,按柱面进行分区

0磁道0扇区:512bytes

446bytes: boot loader主引导程序引导启动

64bytes: 分区表,其中16bytes标识一个分区(扩展分区下的每个逻辑分区前都有一个扇区EBR)

2bytes: 55aa 结束标示位,表示这是一个主引导记录,没有55aa表示没有分区表,是个裸盘

2)、MBR的数据备份

[root@localhost ~]# echo "- – -">/sys/class/scsi_host/host2/scan 添磁盘后触发磁盘生成-例lsblk可查

[root@centos7 ~]# hexdump -C -n 512 /dev/sda 查看磁盘a的最前512个字节的信息

[root@localhost ~]# dd if=/dev/sdb of=/root/mbrb bs=1 count=512 备份b磁盘的MBR信息

[root@localhost ~]# dd if=/root/mbrb of=/dev/sdb 恢复b磁盘的MBR信息

 

[root@localhost ~]# dd if=/root/mbrb of=/dev/sdc

若b磁盘中扩展分区里面有逻辑分区,那么逻辑分区的信息不能恢复给c磁盘

[root@localhost ~]# dd if=/dev/zero of=/dev/sdb bs=1 count=446

其是b磁盘中最前面MBR的446个字节数据被零覆盖,但是b磁盘的分区表因是由接下来的64个字节决定,所以其分区表信息并没有被破坏

[root@localhost ~]# dd if=/dev/zero of=/dev/sdb bs=1 count=64 skip=446 seek=446

跳过/dev/sdb文件开头的446个字节用零覆盖后续的64个字节,清除了b磁盘的分区表信息

4、GPT分区

GPT:GUID patition table 支持128个分区,使用64 位扇区,支持8Z、64Z

使用128 位UUID表示磁盘和分区

GPT分区表自动备份在头和尾两份,并有CRC 校验位

EFI部分又可以分为4个区域:EFI信息区(GPT头)、分区表、GPT分区、备份区域

UEFI (统一扩展固件接口) 硬件支持GPT

5、管理分区

1)、列出块设备:

#lsblk

#ls /dev/sd*

#car /proc/partitions

以上查看内存中识别的已经生效的分区信息,而不是磁盘上已进行的分区信息

#fdisk -l 查看磁盘上的分区情况而不是内存中的已生效的分区情况

2)、创建分区:

fdisk  创建MBR分区,也支持GPT ,对于一块硬盘最多只能管理15 分区

gdisk  创建GPT分区

parted  高级分区操作(创建、复制、调整大小等等),非交互式分区工具,实时生效的,使用上小心

#fdisk /dev/sdb

   #gfisk /dev/sdb

 子命令:

 p  分区列表

 t  更改分区类型

 n  创建新分区

 d  删除分区

 w  保存并退出

 q  不保存退出

parted命令

用法:parted [ 选项]… [设备 [命令 [ 参数]…]…]

parted /dev/sdb mklabel gpt|msdos

指定磁盘标签也即分区表是GPT格式还是msdos格式

parted /dev/sdb print

查看b磁盘的分区情况

parted /dev/sdb mkpart primary 1 200

其中的1 200是指分区大小从1M-200M

parted /dev/sdb rm 1

删除b磁盘上1号分区

parted –l 相当于fdisk -l

3)、通知内核重新读取硬盘分区表

新增分区同步(但是新磁盘的新增分区信息会自动更新进入内存,不用再使用以下命令更新)

partx -a /dev/DEVICE

kpartx -a /dev/DEVICE -f

删除分区同步,要指定删除要同步的分区号

centos6:

partx -d –nr N-M /dev/DEVICE

CentOS 5,7:增删同步都使用#partprobe [/dev/DEVICE]

6、文件系统

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。

系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取、安全控制、日志、压缩、加密等。

1)、文件系统类型:

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

swap:交换分区文件系统

光盘的文件系统:iso9660

Centos5中使用的是ext3,centos6中使用的是ext4,而centos7使用的是xfs

Windows:fat32, ntfs

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

网络文件系统:NFS, CIFS

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

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

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

2)、文件系统分类:

根据其是否支持"journal" 功能:

日志型文件系统: ext3, ext4, xfs, …

非日志型文件系统: ext2, vfat

根据文件系统的组成部分:

内核中的模块:ext4, xfs, vfat

用户空间的管理工具:mkfs.ext4, mkfs.xfs, mkfs.vfat

Linux的虚拟文件系统:VFS,介于用户与各种真实文件系统之间,便于开发人员开发各种软件程序

查看当前系统支持的文件系统:cat /proc/filesystems

文件系统选择:要考虑文件系统的支持分区种类,例如是否支持root分区、boot分区等等,还有就是支持的分区大小限制等等,其中ext4文件系统兼容ext3和ext2

7、创建文件系统

mkfs 命令:

# mkfs.FS_TYPE /dev/DEVICE

# mkfs -t FS_TYPE /dev/DEVICE

#mkfs -L 'LABEL' /dev/DEVICE 设定卷标

ext4

xfs

btrfs

vfat 此文件系统相对比较简单

[root@localhost ~]# mkfs -t vfat /dev/sdc3

mkfs.vfat 3.0.9 (31 Jan 2010)

[root@localhost ~]# blkid

/dev/sdc3: UUID="3004-B6E2" TYPE="vfat"

[root@localhost ~]# mkdir /mnt/sdc3

[root@localhost ~]# mount /dev/sdc3 /mnt/sdc3

[root@localhost ~]# df

[root@localhost ~]# cd /mnt/sdc3

[root@localhost sdc3]# touch fi

[root@localhost sdc3]# echo xxx>fi

[root@localhost sdc3]# ll

total 4

-rwxr-xr-x. 1 root root 4 Aug 28 17:58 fi 普通文件自动加上执行权限

[root@localhost sdc3]# cat fi

xxx

[root@localhost sdc3]# cat FI 不区分大小写

xxx

[root@localhost sdc3]# tune2fs -l /dev/sdc3

tune2fs 1.41.12 (17-May-2010)

tune2fs: Bad magic number in super-block while trying to open /dev/sdc3

Couldn't find valid filesystem superblock.

8、创建ext文件系统,只支持ext系列文件系统,但是其选项与mkfs通用

mke2fs:ext系列文件系统专用管理工具

#mke2fs /dev/sdb1 默认格式化/dev/sdb1为ext2文件系统

-t {ext2|ext3|ext4} 创建ext3,在blkid命令显示中有点不同于其他文件系统类型

-L 'LABEL' 卷标建议设定为挂载点

[root@localhost ~]# mke2fs -t ext3 -L "/mnt/sdc2" /dev/sdc2

[root@localhost ~]# blkid

/dev/sdc2: LABEL="/mnt/sdc2" UUID="510ba083-c8a2-4e21-8d8c-b5b192029377" SEC_TYPE="ext2"TYPE="ext3"

-j: 相当于 -t ext3

mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3

-b {1024|2048|4096} 只能选择左三种值之一设定块大小,块是存储文件的最小单位,块是分组管理的(就像公司比较大,要分部门、职能管理是一个道理,主要是为了便于管理数据),每个分区的第一个块是为超级块,超级块存储文件系统的元数据比如文件系统的块大小、各个块组的起始位置等等,超级块信息在创建文件系统时自动备份多份

Superblock backups stored on blocks:

    32768, 98304, 163840, 229376, 294912

#mk2fs -t ext4 -b 1024 /dev/sdb1

-i #:为数据空间中每多少字节创建一个inode(每个文件唯一性的数字编号,inode数量应该适当,每个inode指定其标记文件的元数据信息);此大小不应该小于block的大小,大小范围为128-4096且为128的整数倍

#mkfs.ext4 -i 1024 /dev/sdb1 指定每1024个字节创建一个inode

-N #:为数据空间创建个多少个inode

#mkfs.ext4 -N 40363 /dev/sdb1 为分区/dev/sdb1指定了40363个inode

-m #:默认5%, 为管理人员预留空间占总空间的百分比

-O FEATURE[,…]:启用指定特性

-O ^FEATURE:关闭指定特性,例如has_journal日志功能

8、文件系统标签-指向设备的与设备无关另一种方法

blkid:块设备属性信息查看,即是块设备的标签、uuid、文件系统类型等等信息

blkid [OPTION]… [DEVICE]

-U UUID: 根据指定的UUID来查找对应的设备

-L LABEL:根据指定的LABEL来查找对应的设备

e2label:管理ext系列文件系统的LABEL,即是给ext系列文件系统添加或者查看其标签

# e2label DEVICE [LABEL] 加卷标或者查看卷标

# e2label /dev/sdb1 查看卷标

# e2label /dev/sdb1 /mnt/sdb1 加卷标

findfs:查找指定的LABEL或者UUID对应的分区

#findfs [options] LABEL=<label>

#findfs [options] UUID=<uuid>    

[root@localhost ~]# findfs UUID=510ba083-c8a2-4e21-8d8c-b5b192029377

/dev/sdc2

9、tune2fs命令-重新设定ext系列文件系统可调整参数的值

-l:查看指定文件系统超级块信息super block

#tune2fs -l /dev/sdc2

[root@localhost ~]# tune2fs -l /dev/sdc2

tune2fs 1.41.12 (17-May-2010)

Filesystem volume name:   /mnt/sdc2

Last mounted on:          <not available> 

Filesystem UUID:          510ba083-c8a2-4e21-8d8c-b5b192029377

Filesystem revision #:    1 (dynamic)

Filesystem features:   has_journal ext_attr resize_inode dir_index filetype sparse_super large_file

Filesystem flags:         signed_directory_hash

Default mount options:    (none)

Filesystem state:         clean

Errors behavior:          Continue

Filesystem OS type:       Linux

Inode count:              197600

Block count:              789193

Reserved block count:     39459为管理人员预留空间占总空间百分之五,以防数据空间用完,管理员无法管理

Free blocks:              759222

Free inodes:              197589

First block:              0

Block size:               4096

Blocks per group:         32768

Fragments per group:      32768

Inodes per group:         7904

Inode blocks per group:   494

Filesystem created:       Sun Aug 28 16:53:19 2016

Last mount time:          n/a

Last write time:          Sun Aug 28 16:53:20 2016

Mount count:              0 命令可以挂载,开机也会自动挂载一次,其中-C选项可以更改当前挂载次数

Maximum mount count:      29 挂载次数达到最大挂载次数后,文件系统自检,其中-c可以更改最大挂载次数

Last checked:             Sun Aug 28 16:53:19 2016

Check interval:           15552000 (6 months)

Next check after:         Fri Feb 24 16:53:19 2017

First inode:              11

Inode size:               256

Journal inode:            8

-L 'LABEL':修改卷标

-U UUID: 修改UUID号

-m #:修预留给管理员的空间百分比

-j: 将ext2升级为ext3

-O: 文件系统属性启用或禁用,–O ^has_journal

-o: 调整文件系统的默认挂载选项,–o ^acl

(Centos7.2在创建文件系统时自动有acl功能;但是Centos6需要手动加acl功能,但是若挂载后则要重新挂载才能生效)

#tune2fs -o user_xattr /dev/sdb1

#tune2fs -o acl /dev/sdb1

dumpe2fs

#dumpe2fs /dev/sdb1 查看sdb1分区的超级块、超级块备份及块组信息

-h:查看超级块信息

10、文件系统检测和修复,但是物理磁盘的损坏不能修复-文件系统损坏常发生于死机或者非正常关机之后

文件系统破坏时,查看超级块信息,其中文件系统状态标记为“dirty”或者“no clean”

fsck: File System Check

fsck.FS_TYPE DEVICE

#fsck /dev/sdb1

#fsck.ext4 /dev/sdb1

fsck -t FS_TYPE DEVICE

-a: 自动修复错误

-r: 交互式修复错误

注意: FS_TYPE 一定要与分区上已经文件类型相同

e2fsck: ext系列文件专用的检测修复工具

-y:自动回答为yes

-f:强制修复

11、挂载mount只有管理员有权限执行,临时挂载

挂载:将额外文件系统与根文件系统某现存目录建立起关联关系,进而使得此目录作为其访问入口的行为

卸载:解除此关联关系的过程

挂载点目录下原有文件在挂载完成后会被临时隐藏,所以挂载点目录一般要为空

挂载方法:mount DEVICE MOUNT_POINT

此挂载后,/etc/mtab默认更新,如下:

#mount通过查看/etc/mtab 文件显示当前已挂载的所有设备,包括挂载的选项也能看到

也即是#mount与#cat /etc/mtab等价

此外应用#cat /proc/mounts也可以查看到已挂载设备及挂载选项,因为其查看的是内核追踪到的挂载

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

例如#mount tmpfs /dev/shm

dir:挂载点

事先存在,建议使用空目录,否则挂载点目录下原有文件在挂载完成后会被临时隐藏

进程正在使用中的设备无法被卸载

mount 常用命令选项:

-t vsftype :指定要挂载的设备上的文件系统类型

-r: readonly,只读方式挂载,若果认为一些磁盘很重要只能读不能改写,就可以这样设置

-w: read and write, 读写方式挂载,其实默认挂载就是可读可写挂载

-n: 不更新/etc/mtab,相当于不更新#mount

且#df也不显示挂载信息,但是#cat /proc/mounts可以查看本次挂载设备

-L 'LABEL':以卷标指定挂载设备

-U 'UUID':以UUID 指定要挂载的设备

-B, –bind:绑定目录到另一个目录上

[root@localhost ~]# mount -B /testdir/b1 /mnt/b1

-a:自动挂载所有支持自动挂载的设备( 定义在了/etc/fstab文件中,且挂载选项中有auto 功能)

-o options:( 挂载文件系统的选项),多个选项使用逗号分隔,但是都是临时有效的,除非写入/ect/fstab中

async:异步模式

sync:同步模式, 内存更改时,同时写磁盘,可避免数据丢失,但是服务器性能下降

atime/noatime:包含目录和文件

atime时间更新的两种情况:查看已经一天以上或者mtime时间较atime时间离当前更近

diratime/nodiratime:只对目录的访问时间戳

auto/noauto:是否支持自动挂载, 配合-a 选项使用

exec/noexec:是否支持在此文件系统上运行应用程序,例如此文件系统上的fi.sh是否可以运行;当U盘等外来设备挂载时可以使用该选项,防止非法程序的运行,减免风险

dev/nodev:是否支持在此文件系统上使用设备文件

suid/nosuid:不否支持suid 和sgid 权限,默认nosuid

remount:重新挂载使挂载选项生效

#mount -o remount /dev/sdb1

#mount -o ro,acl remount /dev/sdb1

ro:只读

rw:读写

#mount –o ro,remount /dev/sdc3 /mnt/sdc3

user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载

acl/noacl:启用或者禁用此文件系统上的acl功能

Defaults:相当于rw, suid, dev, exec, auto, nouser, async

13、卸载命令

1)、查看挂载情况

#findmnt MOUNT_POINT

2)、查看正在访问指定文件系统的进程

#lsof MOUNT_POINT

#fuser -v MOUNT_POINT

3)、终止所有在正访问指定的文件系统的进程,一般要提前发通知提醒

# fuser -km MOUNT_POINT

4)、卸载-umount命令只有管理员有权限运行

# umount DEVICE 若果设备挂载于多个目录,将全部取消挂载

# umount MOUNT_POINT 仅取消对应挂载点上的挂载,若挂载点上有几个挂载设备,则取消最近的挂载

14、挂载点和/etc/fstab,其中/etc/fstab是挂载的配置文件,写入此文件中的挂载是永久挂载

写入配置文件时,可以在设备栏使用文件系统卷标

使用mount -a 命令挂载/etc/fstab中的所有文件系统,也就是没有挂过会进行挂载,但是挂载过后不再挂载,所以要修改配置文件中已挂载文件系统的挂载选项,就要使用例如#mount -o remount /dev/sdb1重新挂载生效

/etc/fstab 每行定义一个要挂载的文件系统,每行内容依次为:要挂载的设备或伪文件系统、挂载点、文件系统类型、挂载选项、转储频率、自检次序

其中要挂载的设备或伪文件系统可以写为:设备文件、LABEL="" 、UUID=""、伪文件系统名称(如proc,sysfs)

 挂载选项:defaults或者选择其他文件系统选项

转储频率:

0 :不做备份

1 :每天转储备份

2 :每隔一天转储备份

自检次序(开机时是否检测文件系统的完整性,即是否自动执行fsck,如配置信息某设备的UUID有错误,在设置启动自检情况下,系统不能正常启动):

 0 :不自检,一般设置为不自检,以免在配置信息发生错误的情况下系统不能正常启动

1 :首先自检,一般只有rootfs才用1

挂载文件作为分区使用:

[root@localhost ~]# dd if=/dev/zero of=/testdir/partfile bs=1M count=500

500+0 records in

500+0 records out

524288000 bytes (524 MB) copied, 7.63616 s, 68.7 MB/s

[root@localhost ~]# mkdir /mnt/partfile

[root@localhost ~]# mkfs.ext4 /testdir/partfile

mke2fs 1.41.12 (17-May-2010)

/testdir/partfile is not a block special device.

Proceed anyway? (y,n) y 但是创建文件系统后,在#blkid中并不显示此文件设备文件系统的属性信息

[root@localhost ~]# mount /testdir/partfile /mnt/partfile

mount: /testdir/partfile is not a block device (maybe try `-o loop'?)

[root@localhost ~]# mount /testdir/partfile /mnt/partfile  -o loop

或者把/testdir/partfile /mnt/partfile ext4 loop 0 0写入/etc/fstab配置文件中永久挂载

此时挂载选项为loop

使用#mount可以查看此文件设备在挂载时自动默认映射到loop=/dev/loop0

#losetup /dev/loop2 /testdir/partfile 强行指定/dev/loop2代表/testdir/partfile

#mount /dev/loop2 /mnt/partfile 那么此命令相当于挂载/testdir/partfile,此文件设备挂载映射到loop2

#losetup –a可以查看loop的对于代表设备

#lsblk可知/testdir/partfile是以loop0挂载的

#ll /dev/l*可以查看当前系统默认有多个loop设备供使用

目录挂目录:

#mkdir /mnt/boot

# mount -B /testdir/boot /mnt/boot

或者把/boot /mnt/boot none bind 0 0写入/etc/fstab配置文件中永久挂载

#df不可查看到此目录挂载,目录挂载可以#mount查看挂载

挂载也可以挂载远程网络资源,比如nfs共享:

即是把10.1.0.1:/share /mnt/nfs nfs defaults 0 0写入/etc/fstab配置文件中永久挂载

15、交换分区

交换分区是系统RAM 的补充,其是作为内存交换使用的,所以交换分区应该建在高速磁盘中或者新磁盘的最外侧

Swap的挂载用df看不到,可以使用free查看,但是free只能查看总大小,不能查看各个交换分区

可以使用#cat /proc/swaps可以查看那个分区提供了各个swap

基本设置包括:

创建交换分区或者文件

使用mkswap 写入特殊签名也即是创建swap文件系统

[root@localhost ~]# mkswap -L SWAP_SDE1 /dev/sde1

Setting up swapspace version 1, size = 4200960 KiB

LABEL=SWAP_SDE1, UUID=60df9636-c2b8-4f2c-a065-07b86b1c93e7

[root@localhost ~]# blkid /dev/sde1

/dev/sde1: LABEL="SWAP_SDE1" UUID="60df9636-c2b8-4f2c-a065-07b86b1c93e7" TYPE="swap"

在/etc/fstab 文件中添加适当的条目进行挂载而不是使用mount挂载,如下:

UUID="60df9636-c2b8-4f2c-a065-07b86b1c93e7" swap swap  defaults,pri=1 0 0

使用#swapon -a激活所有交换空间,然后可以使用#swapon -s查看激活生效的各个swap分区

1)、用户可以给某个swap 指定一个0到32767 的优先级;如果用户没有指定,那么内核会自动给swap 指定一个优先级,这个优先级从-1 开始,每加入一个新的没有用户指定优先级的swap ,会给这个优先级减一;先添加的swap 的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级( 是正数) 永远高于内核缺省指定的优先级( 是负数)。

优化性能:分布存放,高性能磁盘存放

启用:swapon

swapon [OPTION]… [DEVICE]

-a:激活所有的交换分区

#swapon -a

-p PRIORITY:指定优先级或者修改配置文件/etc/fstab挂载选项,例如pri=1

#swapon -p 1 /dev/sdb1 这里/dev/sdb1是一个swap分区

禁用:swapoff [OPTION]… [DEVICE]

     若要删除某swap分区,先禁用然后进入配置文件删除相关配置信息 ,再删除相应的swap分区或文件

     #swapoff /dev/sdb1

16、移动设备使用-U盘和光盘

1)、访问前,介质必须被挂载,挂载意味着使外来的文件系统看起来如同是主目录树的一部分

例如插上U盘后会自动识别挂载,一般为/dev/sdf1等等,而且系统会自动加载USB模块,加载的模块可以使用#lsmod命令查看

[root@centos7 ~]# lsmod|grep usb

usb_storage            66523  1

然后就可以进行文件的拷贝,但是为了防止数据拷贝缺失,拷贝后可以执行#sync命令使之立即同步数据

摘除时,介质必须被卸载

挂载点通常在/media 或/mnt下

按照默认设置,非根用户只能挂载某些设备(光盘、DVD、软盘、USB 等等)

光盘在图形环境下自动启动挂载/run/media/<user>/<label>

否则就必须被手工挂载

#mount /dev/cdrom /mnt/ 光盘的真实设备名称是/dev/sr0,/dev/cdrom是光盘的软链接

eject 命令卸载或弹出光盘

创建ISO 文件即创建镜像文件

#cp /dev/sr0 /testdir/centos7.iso

#cp /dev/cdrom /root/centos7.iso

若想挂载使用可以如下:

#mkdir /mnt/iso

#mount /testdir/centos7.iso /mnt/iso –o loop

#mkisofs -r -o /root/etc.iso /etc 把目录打包成ISO文件

刻录光盘(要有刻录机):

#wodim –v -eject centos.iso

17、常见工具

1)、内存空间使用状态:

free [OPTION]

-m: 以MB为单位

-g: 以GB

     -h: MB和GB为单位

2)、文件系统空间占用等信息的查看工具:

df [OPTION]… [FILE]…

-H: 1000为单位,同下-h

-h: human-readable,以易读方式显示

-T: 文件系统类型

-i:inodes instead of blocks,文件系统节点信息查询

3)、查看某目录总体空间占用状态:

du [OPTION]… DIR

-h: human-readable

-s: summary

[root@centos7 ~]# du -s /etc

29112   /etc

[root@centos7 ~]# du -sh /etc

29M     /etc

[root@centos7 ~]# du -h /etc 易读方式查看/etc下一级目录总体空间占用情况

4)、dd 命令:convert and copy a file

#dd if =/PATH/FROM/SRC of=/PATH/TO/DEST

bs=#:block size,复制单元大小

count=#:复制多少个bs

   skip=blocks 从开头忽略blocks个ibs 大小的块读取

seek=blocks 从开头忽略blocks个obs大小的块写入

   conv=conversion[,conversion…]用指定的参数转换文件

       转换参数:

       lcase  把大写字符转换为小写字符

       ucase  把小写字符转换为大写字符

       #dd if=a.txt of=aa.txt conv=ucase 把a.txt的文件数据转换为大写写入aa.txt中,如果aa.txt不存在自动默认创建,但是加上nocreate参数,就不再默认创建,文件aa.txt不存在会报错

       notrunc  不截短输出文件

       [root@centos7 ~]# echo {a..z}|tr -d ' '>f1

[root@centos7 ~]# echo {a..z}|tr -d ' '>f2

[root@centos7 ~]# dd if=f1 of=f2 bs=1 count=3 skip=5 seek=3

3+0 records in

3+0 records out

3 bytes (3 B) copied, 0.000133773 s, 22.4 kB/s

[root@centos7 ~]# cat f2

abcfgh

意思是:从f1开头跳过5个字节取3个字节,就是fgh,然后把这三个字节写入f2(写入的方法是跳过f2文件中的前三个字节,然后覆盖写入fgh,后面的其它数据不保留)

但若:

[root@centos7 ~]# dd if=f1 of=f2 bs=1 count=3 skip=5 seek=3 conv=notrunc

[root@centos7 ~]# cat f2

abcfghghijklmnopqrstuvwxyz

磁盘拷贝:

dd if=/dev/sda of=/dev/sdb

备份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,size>2K ,现在想从第64 个字节位置开始读取,需要读取的大小是128Byts ,又有fileB,  想把上面读取到的128Bytes 写到第32 个字节开始的位置,替换128Bytes ,请问如何实现?

#dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc

备份:

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 工具进行压缩,保存到指定路径的image.gz文件

恢复:

dd if=/path/to/image of=/dev/sdx

将备份文件恢复到指定盘

gzip -dc /path/to/image.gz | dd of=/dev/sdx

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

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

通过比较dd 指令输出中所显示的命令执行时间,即可确定系统最佳的block size

测试硬盘读写速度:

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

通过上述命令输出的执行时间,可以计算出测试硬盘的读写速度

修复硬盘:

dd if=/dev/sda of=/dev/sda

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

原创文章,作者:18612763863,如若转载,请注明出处:http://www.178linux.com/42384

(0)
1861276386318612763863
上一篇 2016-09-01
下一篇 2016-09-01

相关推荐

  • Linux 用户, 组和权限

    用户, 组和权限 Linux登陆需要用户名、密码。/etc/passwd 文件保存用户名。登录linux时,Linux 先查找 /etc/passwd 文件中是否有这个用户名,没有则跳出,有则读取用户名的user ID 、 group ID 、用户名对应的根目录路径以及所使用的 shell ,最后在 /etc/shadow 中核对该 UI…

    2017-07-22
  • ansible实践

    本偏文章以上图拓扑部署 首先准备了6台为centos7的主机(确保selinux和iptables不会成阻碍!关闭他们) 我们先来安装ansible吧! 配置EPEL源过后使用 yum -y install ansible  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 出师不利啊,安装ansible就失败了。!!!!!! 看了一下…

    Linux干货 2017-01-27
  • 马哥linux0811作业内容

    总结位置变量$1,$2.. $10,$11…MAX 位置变量的含义分别就是代表第几个参数,$1就是脚本运行的第一个参数.$2就是第二个.以此类推.直到最后. $*,$@,$# 区别 特殊变量: $0 : 表示命令本身 $#:传递给命令的参数个数 $*:传递给脚本的所有参数(所有参数是一个整体的字符串) $@:传递给脚本的所有参数(各个参数都是独立…

    Linux干货 2016-08-19
  • N21—-第一周课程练习题

    1、描述计算机的组成及其功能。 我们现在通常理解为计算机是由硬件系统+软件系统组成的,根据冯·诺依曼体系结构。计算机主要由五大部件组成:      运算器(Datapath): 计算机中执行各种算术和逻辑运算操作的部件      控制器(Control):是整个计算机的中枢神经,…

    Linux干货 2016-07-12
  • java基础篇—内存分析

    Java的并发采用的是共享内存模型(而非消息传递模型),线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变量来实现 同步是显式进行的。程序员必须显式指定某个方法或某段代码需要在线程之间互斥执行。 1、多线程通信 1.1 内存模型 Java线程之间的通信由Java内存…

    Linux干货 2015-03-16
  • 2016-11-4作业

    1、创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项  mkfs.ext4 -b 2048  -L "TEST" -m 1 /dev/sdb6 2、写一个脚本,完成如下功能: (1) 列出当前系统识别到…

    Linux干货 2016-11-06