L53.linux命令每日一练 -- 第八章 Linux磁盘与文件系统管理命令 -- dd和mount

8.9 dd:转换或复制文件

8.9.1 命令详解

【命令星级】 ★★★★☆

【功能说明】

​ dd命令具有复制文件、转换文件和格式化文本的功能。

【语法格式】

dd [option] 
dd [选项] 

​ **说明:**在dd命令及后面的选项里,每个元素之间都至少要有一个空格。

【选项说明】

​ 表8-10针对该命令的参数选项进行了说明。

​ 表8-10 dd命令的参数选项及说明

在这里插入图片描述

8.9.2 使用范例

​ **范例8-19:**将/dev/sda1分区复制(备份)到文件中。

[root@centos7 ~]# df -h		#查看磁盘使用情况,后面会讲。
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        476M     0  476M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.6M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda3        17G  2.4G   15G  14% /
tmpfs            98M     0   98M   0% /run/user/0
[root@centos7 ~]# dd if=/dev/sda1 of=dev_sda1.img	#使用if从/dev/sda1中读取数据,使用of指定输出到当前目录的dev_sda1.img。
2097152+0 records in
2097152+0 records out
1073741824 bytes (1.1 GB) copied, 28.2091 s, 38.1 MB/s
[root@centos7 ~]# ll -h dev_sda1.img 	#查看输出文件的大小。
-rw-r--r--. 1 root root 1.0G Oct 26 19:12 dev_sda1.img

​ **范例8-20:**删除/dev/sda1分区数据。

​ 下面的实验很危险,请使用虚拟机操作,并提前做好快照。

​ 从/dev/zero设备读取数据,写入或覆盖/dev/sda1的数据:

[root@centos7 ~]# dd if=/dev/zero of=/dev/sda1	#/dev/zero是一个特殊的设备,相当于什么都没有。
dd: writing to ‘/dev/sda1’: No space left on device	#提示写满了。
2097153+0 records in
2097152+0 records out
1073741824 bytes (1.1 GB) copied, 28.6279 s, 37.5 MB/s

说明:/dev/zero是0字符设备,可产生连续不断的特殊数据流,生成的文件为特殊格式的数据文件(二进制)。

[root@centos7 ~]# df -h	#查看分区状态。
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        476M     0  476M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.6M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda3        17G  3.4G   14G  20% /
tmpfs            98M     0   98M   0% /run/user/0
[root@centos7 ~]# ls /boot
[root@centos7 ~]# 

​ 可以看到,上面的/boot分区被清空了,此时系统已经遭到破坏。这种情况千万不要重启系统,boot分区受损是无法启动系统的,应该继续下面的恢复操作。

​ **范例8-21:**用范例8-19的备份恢复范例8-20删除的分区数据。

[root@centos7 ~]# dd if=dev_sda1.img of=/dev/sda1
2097152+0 records in
2097152+0 records out
1073741824 bytes (1.1 GB) copied, 91.6404 s, 11.7 MB/s
[root@centos7 ~]# ls /boot	
[root@centos7 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        476M     0  476M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.6M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda3        17G  3.4G   14G  20% /
tmpfs            98M     0   98M   0% /run/user/0
#现在还是看不到/boot分区。
[root@centos7 ~]# reboot
[root@centos7 ~]# ls /boot
config-3.10.0-1127.19.1.el7.x86_64
config-3.10.0-1127.el7.x86_64
efi
grub
grub2
initramfs-0-rescue-718bcb547ced43efa48829fbb5b967ea.img
initramfs-3.10.0-1127.19.1.el7.x86_64.img
initramfs-3.10.0-1127.el7.x86_64.img
symvers-3.10.0-1127.19.1.el7.x86_64.gz
symvers-3.10.0-1127.el7.x86_64.gz
System.map-3.10.0-1127.19.1.el7.x86_64
System.map-3.10.0-1127.el7.x86_64
vmlinuz-0-rescue-718bcb547ced43efa48829fbb5b967ea
vmlinuz-3.10.0-1127.19.1.el7.x86_64
vmlinuz-3.10.0-1127.el7.x86_64
#重启之后正常。

​ **提示:**要特别注意if、of参数,如果位置写反了,就会出大问题。

​ **范例8-22:**生成任意大小的测试文件。

[root@centos7 ~]# dd if=/dev/zero of=test.data bs=1M count=2	#从/dev/zero读取数据写入到test.data,生成文件test.data的大小为bs*count=1M*2=2M。
2+0 records in
2+0 records out
2097152 bytes (2.1 MB) copied, 0.00744399 s, 282 MB/s
[root@centos7 ~]# ll -h test.data 	#查看生成文件的大小。
-rw-r--r--. 1 root root 2.0M Oct 26 19:37 test.data

​ **范例8-23:**制作Linux系统的ISO镜像。

​ 在Windows系统里制作光盘的ISO镜像,还需要安装其他软件。但在Linux系统中只需要dd命令就足够了。

​ 在做实验时,如果需要将CentOS的完整系统镜像上传到Linux系统中,一般使用winSCP或Xshell等工具,但这是通过网络传输的方式,上传速度受限于网络带宽。此时可以使用dd命令,将从光驱读取的镜像复制到系统中,相当于光驱与磁盘对拷。

​ **说明:**如果大家有真实的服务器,请将CentOS光盘放入光驱;如果时使用虚拟机进行模拟,则选择“编辑虚拟机设置”,随后的操作如图8-4所示。

在这里插入图片描述
​ 图8-4 放置光盘镜像

​ 将光盘放入光驱之后,需要确保光驱可以正常读取,然后执行如下命令即可实现将光盘复制到Linux硬盘的操作:

[root@centos7 ~]# dd if=/dev/sr0 of=CentOS7.iso		#虚拟机挂载CentOS7镜像,读者可以挂载自己电脑已有的镜像,不需要和笔者的一致,/dev/sr0是光驱设备。
20066304+0 records in
20066304+0 records out
10273947648 bytes (10 GB) copied, 694.979 s, 14.8 MB/s	#传输速度取决于光驱与磁盘之间的读写速度,可以看到这种方式的传输速度远远大于网络传输速度。
[root@centos7 ~]# ll -h CentOS7.iso 	#文件大小取决于所挂载的镜像大小。
-rw-r--r--. 1 root root 9.6G Oct 26 19:57 CentOS7.iso

​ **范例8-24:**使用dd复制文件并进行格式转换的例子。

[root@centos7 ~]# dd if=test.txt conv=ucase of=test.txt_u	#利用conv参数设置ucase将小写转换为大写。
0+1 records in
0+1 records out
45 bytes (45 B) copied, 0.000248663 s, 181 kB/s
[root@centos7 ~]# cat test.txt_u 
WELCOME TO MY BLOG. HTTPS://WWW.NETEAGLES.CN

8.10 mount:挂载文件系统

8.10.1 命令详解

【命令星级】 ★★★★★

【功能说明】

​ mount命令可以将指定的文件系统挂载到指定目录(挂载点),在Linux系统下必须先挂载所有的设备,然后才能被访问,挂载其实就是为要访问的设置开个门(开门才能访问)。

【语法格式】

mount [option] [device] [dir]
mount [选项] [设备] [目录]

说明:

​ 1)在mount命令及后面的选项、设备和目录里,每个元素之间都至少要有一个空格。

​ 2)挂载的目录必须事先存在且最后为空,如果目录不为空,那么挂载设备后会掩盖一起的目录内容,但原目录下的内容不会受损,所以,如果卸载了相应的设备,那么此前的目录内容又可以访问了。

【选项说明】

​ 表8-11至表8-12针对该命令的参数选项进行了说明。

​ 表8-11 mount命令的参数选项及说明

在这里插入图片描述
​ 其中mount的-o参数可以接的挂载选项请参见表8-12。

​ 表8-12 mount的-o参数可接的选项※
在这里插入图片描述

在这里插入图片描述

8.10.2 使用范例

​ **范例8-25:**显示系统已挂载的信息(不加参数或加-l参数)。

[root@centos7 ~]# mount	#直接输入mount命令然后回车就可以查看系统的挂载信息。
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=487240k,nr_inodes=121810,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuset)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,hugetlb)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,devices)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,net_prio,net_cls)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuacct,cpu)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,freezer)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,perf_event)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,pids)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,memory)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,blkio)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/sda3 on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)	#磁盘/dev/sda3挂载在(on)根上,文件系统类型为xfs,可读可写(rw)。
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=32,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=13548)
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=99572k,mode=700)

[root@centos7 ~]# mount -l	#参数-l也能查看挂载信息。
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=487240k,nr_inodes=121810,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuset)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,hugetlb)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,devices)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,net_prio,net_cls)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuacct,cpu)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,freezer)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,perf_event)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,pids)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,memory)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,blkio)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/sda3 on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=32,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=13548)
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=99572k,mode=700)

​ **范例8-26:**对系统的光驱进行挂载。

​ 首先要把光盘放入光驱驱动器中,如果时VM(虚拟机),则需要将ISO镜像放入VM光驱驱动器中,然后执行下面的操作:

[root@centos7 ~]# mount /dev/sr0 /mnt	#这里没有指定-t iso9660,但mount命令会自动识别。
mount: /dev/sr0 is write-protected, mounting read-only	#提示设备写保护,只读挂载。
[root@centos7 ~]# ll /dev/cdrom
lrwxrwxrwx. 1 root root 3 Oct 26 19:32 /dev/cdrom -> sr0	#cdrom时sr0的软链接。
[root@centos7 ~]# df -h	#查看是否挂载。
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        476M     0  476M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.7M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda3        17G   13G  4.1G  77% /
/dev/sda1      1014M  160M  855M  16% /boot
tmpfs            98M     0   98M   0% /run/user/0
/dev/sr0        9.6G  9.6G     0 100% /mnt	#已经挂载成功。
[root@centos7 ~]# ls /mnt	#查看光盘内容。
CentOS_BuildTag  GPL       LiveOS    RPM-GPG-KEY-CentOS-7
EFI              images    Packages  RPM-GPG-KEY-CentOS-Testing-7
EULA             isolinux  repodata  TRANS.TBL
[root@centos7 ~]# umount /mnt	#执行卸载操作,保留挂载点,后面可以继续用来进行挂载测试。

​ **范例8-27:**使用性能及安全挂载参数选项(-o多选项)的企业案例。

​ 在工作中,我们会经常使用NFS网络文件系统,若要使用NFS文件系统,则需要进行挂载。本例假设读者已经部署了NFS网络文件系统服务,挂载点为:10.0.0.3:/data,挂载操作如下:
在这里插入图片描述

​ **范例8-28:**生产场景文件系统故障解决案例。

​ 由于系统等问题,在工作中可能会造成文件系统只读,这时就需要重新挂载根(/)为读写模式。

[root@centos7 ~]# mount -o remount,rw /		#remount尝试重新挂载“/”为rw(可读可写)。

​ 如果上述操作还不能解决问题,则需要重启系统或使用救援模式来解决。

​ **范例8-29:**生产场景配置fstab后防止开机启动出错案例。

​ 在工作中,当添加新的磁盘时,会有永久性挂载的需求,此时就会配置/etc/fstab这个文件,但这个文件若配置错误则有可能造成系统重启后无法开机,因此,在配置好fstab文件后可先用mount -a读取/etc/fstab进行挂载测试,如果能挂载成功,那么重启一般也会正常,反之则会出现异常。

[root@centos7 ~]# tail -1 /etc/fstab 	#查看fstab文件。
/dev/sdb1                                  /mnt                   ext4    defaults        0 0
[root@centos7 ~]# df -h	#查看当前磁盘的挂载情况。
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        476M     0  476M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.7M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda3        17G   13G  4.1G  77% /
/dev/sda1      1014M  160M  855M  16% /boot
tmpfs            98M     0   98M   0% /run/user/0
[root@centos7 ~]# mount -a	#带-a参数执行挂载操作。
[root@centos7 ~]# df -h	#再次查看当前磁盘的挂载情况。
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        476M     0  476M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.7M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda3        17G   13G  4.1G  77% /
/dev/sda1      1014M  160M  855M  16% /boot
tmpfs            98M     0   98M   0% /run/user/0
/dev/sdb1       384M  2.3M  360M   1% /mnt	#已经挂载好,如果/mnt被占用则请卸载。

​ **提示:**经过这样的挂载测试以后,就可以确保下一次开机的时候,系统能够重启成功,当然修改fstab文件也要特别注意,最后一列的数字最好改为0(表示不用fsck检查)。

猜你喜欢

转载自blog.csdn.net/qq_25599925/article/details/125687524