前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Linux 磁盘管理命令:dd磁盘操作

Linux 磁盘管理命令:dd磁盘操作

原创
作者头像
鱼多多
发布2025-01-16 15:56:32
发布2025-01-16 15:56:32
1770
举报
文章被收录于专栏:LinuxLinux

Linux 磁盘管理命令

df:显示报告文件系统磁盘使用信息

  • 作用:查看磁盘信息,显示磁盘的文件系统与使用情形。
  • 用法:df 选项... 文件...
  • 主要选项如下:

命令

描述

-a 或--all

列出包括 BLOCK 为 0 的文件系统。

--block-size=<区块大小>

以指定的区块大小来显示区块数目。

-h 或--human-readable

以可读性较高的方式来显示信息。

-H 或--si

与-h 参数相同,但在计算时以 1000B 为换算单位而非 1024B。

-i 或--inodes

显示 inode 的信息。

-k 或--kilobytes

指定区块大小为 1024B。

-l 或--local

仅显示本地端的文件系统。

-m 或--megabytes

指定区块大小为 1 048 576B。

--no-sync

在取得磁盘使用信息前,不要执行 sync 指令,此为预设值。

-P 或--portability

使用 POSIX 的输出用法。

--sync

在取得磁盘使用信息前,先执行 sync 指令。

-t<文件系统类型>或--type=<文件系统类型>

仅显示指定文件系统类型的磁盘信息。

-T 或--print-type

显示文件系统的类型。

-x<文件系统类型>或--exclude-type=<文件系统类型>

不要显示指定文件系统类型的磁盘信息。

--help

显示帮助信息。

--version

显示版本信息。

[文件]

指定磁盘设备。

案例练习

(1)显示所有文件系统对 I-node 节点和磁盘块的使用情况,这时需要一个参数-i。

代码语言:bash
复制
# df -i 
文件系统 Inode (I)已用 (I)可用 (I)已用% 挂载点
/dev/mapper/VolGroup00-LogVol00 
 			1795200 143723 1651477 9% / 
/dev/sda1	 26104 43 26061 1% /boot 
tmpfs 		48690 1 48689 1% /dev/shm 
none 		48668 4 48664 1% /var/lib/xenstored 

从上面这些信息可以看出每个文件系统中有多少可用的 I-node、其中有多少已被使用、还 剩余多少、它们所占的比例等整个硬盘的使用情况。因此,系统管理员需要了解这些情况。 有时会发现这样的情况:某些硬盘的容量超过了 100%。这是因为 Linux 系统为超级用户 保留了 10%的空间由它单独支配。也就是说,对于超级用户而言,它所见到的硬盘容量将是 110%。这样的安排对于系统管理而言是有好处的,当硬盘被使用的容量接近 100%时,系统管 理员还可以正常工作。df 工具程序被广泛地用来生成文件系统的使用统计数据。它能显示系统 中所有文件系统的信息,包括它们的总容量、可用的空闲空间、目前的安装点等。

(2)以 MB 为单位显示/home 目录的文件系统使用情况。

代码语言:bash
复制
## df –m /home/ 
文件系统 1M-块 已用 可用 	已用% 	挂载点
/dev/mapper/VolGroup00-LogVol00 
					 6789	 3895	 2544 	61% /

du:显示目录或者文件所占的磁盘空间

  • 作用:du 命令能显示关于硬盘使用情况的信息,它能显示某个目录下的所有文件和子目录 占用硬盘空间的大小。
  • 用法:du 选项...文件...
  • 主要选项如下:

a 或-all

显示目录中个别文件的大小。

-b 或-bytes

显示目录或文件大小时,以字节为单位。

-c 或--total

除了显示个别目录或文件的大小外,同时显示所有目录或文件的大小总和。

-D 或--dereference-args

显示指定符号链接的源文件大小。

-h 或--human-readable

以 KB、MB、GB 为单位,提高信息的可读性。

-H 或--si

与-h 参数相同,但是 KB、MB、GB 以 1000 为换算单位。

-k 或--kilobytes

以 1024B 为单位。

-l 或--count-links

重复计算硬件链接的文件。

-L<符号链接>或--dereference<符号链接>

显示选项中所指定符号链接的源文件大小。

-m 或--megabytes

以 MB 为单位。

-s 或--summarize

仅显示总计。

-S 或--separate-dirs

显示个别目录的大小时,并不包含其子目录的大小。

-x 或--one-file-xystem

以一开始处理时的文件系统为准,若遇到其他不同的文件系统目录则略过。

-X<文件>或--exclude-from=<文件>

在<文件>中指定目录或文件。

--exclude=<目录或文件>

略过指定的目录或文件。

--max-depth=<目录层数>

超过指定层数的目录后,予以忽略。

-0, --null

结束于 0 字节的输出,而不是换行符。

--help

显示帮助。

--version

显示版本信息。

案例练习

(1)查看 tmp 目录使用情况。

代码语言:bash
复制
# du /tmp 
4 /tmp/.X11-unix 
4 /tmp/VMwareDnD/23c61099 
12 /tmp/VMwareDnD/66ae4cf6 
20 /tmp/VMwareDnD 
4 /tmp/.font-unix 
4 /tmp/.ICE-unix 
8 /tmp/gconfd-root 
8 /tmp/orbit-root 
12 /tmp/tmp 
68 /tmp

通过上面的命令可以看到,每个命令占用的硬盘空间大小以块为单位,列在每行的最前面, 后面跟着目录名称。

(2)显示/usr 目录占用的空间,以 GB 为单位。

代码语言:bash
复制
#du -s --si /usr 
2.8G /usr

(3)显示/tmp 目录下的子目录占用的空间。

代码语言:bash
复制
du /tmp --max-depth=1 
4 /tmp/.X11-unix 
20 /tmp/VMwareDnD 
4 /tmp/.font-unix 
4 /tmp/.ICE-unix 
8 /tmp/gconfd-root 
8 /tmp/orbit-root 
12 /tmp/tmp 
68 /tmp

dd:磁盘操作

  • 作用:从标准输入或文件读取数据,依指定的用法来转换数据,再输出到文件、设备或标 准输出。
  • 用法:dd 操作符...

dd 选项

  • 主要选项如下:

命令

描述

bs=<字节数>

设置输入/输出的字节数。

cbs=<字节数>

设置转换的字节数。

cout=<区块数>

指定读取的区块数。

ibs=<字节数>

设置每次读取的字节数。

if=<文件>

指定文件作为读取的对象。

obs=<字节数>

设置每次输出的字节数。

of=<文件>

将结果输出到指定的文件。

seek=<区块数>

忽略指定的区块数,不进行输出。

skip=<区块数>

忽略指定的区块数,不进行读取。

--help

显示帮助信息。

--version

显示版本信息。

conv=<关键字>

转换方式。转换方式包括如下几种:

ascii 将 EBCDIC 转换成 ASCII。 ebcdic 将 ASCII 转换成 EBCDIC。 ibm 将 ASCII 转换成 alternative EBCDIC。 block 每一行输入,无论长短,输出都是 cbs 字节。 unblock 用 lq 换行 rq 替换每个输入块(cbs 字节大小)末尾的空格。 lcase 将大写字母转换成小写字母。 ucase 将小写字母转换成大写字母。 swab 交换每对输入字节。如果读入的字节数是奇数,则最后 一个字节只是简单地复制到输出(因为没有能跟它交换的字节了)。 noerror 发生读错误时,继续进行。 notrunc 不截断输出文件。 syn c 用 0 填充到每个输入块的末尾,使其大小为 ibs 字节。

说明 dd 是 Linux 的一个非常有用的命令,其作用是用指定大小的块复制一个文件,并在复制的同时进行指定的转换。

案例练习

(1)软盘互相复制。

要把一张软盘的内容复制到另一张软盘上,利用/tmp 作为临时存储区。把源盘插入驱动器 中,输入下述命令:

代码语言:bash
复制
$ dd if =/dev/fd0 of = /tmp/tmpfile

复制完成后,将源盘从驱动器中取出,把目标盘插入,输入如下命令:

代码语言:bash
复制
$ dd if = /tmp/tmpfile of =/dev/fd0

复制完成后,应该将临时文件删除。

代码语言:bash
复制
$ rm /tmp/tmpfile

(2)把 net.i 文件写入软盘中,并设定读/写缓冲区的数目(注意:软盘中的内容会被完全 覆盖掉)。

代码语言:bash
复制
$ dd if = net.i of = /dev/fd0 bs = 16384

(3)将文件 sfile 复制到文件 dfile 中。

代码语言:bash
复制
$ dd if=sfile of=dfile

(4)整盘数据备份与恢复。

① 整盘数据备份。

将本地的/dev/hdx 整盘备份到/dev/hdy。

代码语言:bash
复制
dd if=/dev/hdx of=/dev/hdy

将/dev/hdx 全盘数据备份到指定路径的 image 文件。

代码语言:bash
复制
dd if=/dev/hdx of=/path/to/image 

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

代码语言:bash
复制
dd if=/dev/hdx | gzip /path/to/image.gz 

② 整盘数据恢复。

将备份文件恢复到指定盘。

代码语言:bash
复制
dd if=/path/to/image of=/dev/hdx

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

代码语言:bash
复制
gzip -dc /path/to/image.gz | dd of=/dev/hdx

(5)备份与恢复 MBR 记录。

① 备份 MBR 记录。

备份磁盘开始的 512B 的 MBR 信息到指定文件。

代码语言:bash
复制
dd if=/dev/hdx of=/path/to/image 
count=1 bs=512

② 恢复 MBR 记录。

将备份的 MBR 信息写到磁盘开始部分。

代码语言:bash
复制
dd if=/path/to/image of=/dev/hdx

(6)复制内存资料到硬盘。

将内存里的数据复制到 root 目录下的 mem.bin 文件。

代码语言:bash
复制
dd if=/dev/mem of=/root/mem.bin bs=1024 

要从光盘复制 iso 镜像,可复制光盘数据到 root 文件夹下,并保存为 cd.iso 文件。

代码语言:bash
复制
dd if=/dev/cdrom of=/root/cd.iso

(7)增加 swap 分区文件大小。

创建一个足够大的文件(此处为 256MB)。

代码语言:bash
复制
dd if=/dev/zero of=/swapfile bs=1024 count=262144

把这个文件变成 swap 文件。

代码语言:bash
复制
mkswap /swapfile

启用这个 swap 文件。

代码语言:bash
复制
swapon /swapfile

在每次开机的时候自动加载 swap 文件,需要在/etc/fstab 文件中增加一行。

代码语言:bash
复制
/swapfile swap swap defaults 0 0

(8)销毁磁盘数据。

利用随机的数据填充硬盘。

代码语言:bash
复制
dd if=/dev/urandom of=/dev/hda1

在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/hda1 将无法挂载,创建和复 制操作无法执行。

(9)修复硬盘。

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

代码语言:bash
复制
dd if=/dev/sda of=/dev/sda

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Linux 磁盘管理命令
    • df:显示报告文件系统磁盘使用信息
      • 案例练习
    • du:显示目录或者文件所占的磁盘空间
      • 案例练习
    • dd:磁盘操作
      • 案例练习
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档