您的位置:首页 > 运维架构 > Linux

Linux学习7:文件系统操作与磁盘管理

2017-12-08 19:25 399 查看

1、查看磁盘和目录的容量

1)使用df命令查看磁盘的容量:

一般使用情况下,我们更多只是关心第一行的内容也就是环境中的rootfs或者物理主机上的/dev/sda2。

rootfs:

(Root File System)它是 Ramfs(Ramfs 是一个非常简单的 Linux 文件系统用于实现磁盘缓存机制作为动态可调整大小的基于 ram 的文件系统)或者 tmpfs 的一个特殊实例,它作为系统启动时内核载入内存之后,在挂载真正的磁盘之前的一个临时文件系统。通常的主机会在系统启动后用磁盘上的文件系统替换,只是在一些嵌入式系统中会只存在一个 rootfs ,或者运行在虚拟环境中共享主机资源的系统也可能会采用这种方式。

物理主机上的 /dev/sda2 是对应着主机硬盘的分区,后面的数字表示分区号,数字前面的字母 a 表示第几块硬盘(也可能是可移动磁盘),如果主机上有多块硬盘则可能还会出现 /dev/sdb,/dev/sdc 这些磁盘设备都会在 /dev 目录下以文件的存在形式。

还会看到”1k-blocks”,它表示以磁盘块大小的方式显示容量,后面为相应的以块大小表示的已用和可用容量,以一种你应该看得懂的方式展示:

df -h

挂载点—>目录树结构

2)使用du命令查看目录的容量

默认同样以blocks的大小展示

du

加上-h参数,以更易读的方式展示

du -h

-d :参数指定查看目录的深度

只查看1级目录的信息 :du -h -d 0 ~

查看2级 :du -h -d 1 ~

常用参数:

du -h :同–human-readable ,以K,M,G为单位,提高信息的可读性

du -a :同-all 显示目录中所有文件的大小

du -s :同-summarize 仅显示总计,只列出最后总值。

————————————————————————————

du(estimate file space usage)命令: 查看目录的容量

df(report file system disk space usage):查看磁盘的容量

只一字只差,不要弄混淆了,可以从man手册中获取命令的完整描述,记全称就不会搞混了。

2、简单的磁盘管理

下面涉及的命令具有一定的危险性,操作不当可能会丢失你的个人数据,初学者建议在虚拟环境中进行操作

学习如何挂载卸载磁盘,如何格式化磁盘,如何分区,首先我们会先创建一个虚拟磁盘来进行后续的练习操作。

1)创建虚拟磁盘

dd 命令:

dd命令用于转换和复制文件,不过它的复制不同于cp。

关于 Linux 的很重要的一点,一切即文件,在 Linux 上,硬件的设备驱动(如硬盘)和特殊设备文件(如/dev/zero和/dev/random)都像普通文件一样,只要在各自的驱动程序中实现了对应的功能,dd 也可以读取文件或写入到这些文件。

这样,dd也可以用在备份硬件的引导扇区、获取一定数量的随机数据或者空数据等任务中dd程序也可以在复制时处理数据,例如转换字节序、或在 ASCII 与 EBCDIC 编码间互换。

dd的命令行语句与其他的 Linux 程序不同,它的命令行选项格式为选项=值,而不是更标准的–选项 值或-选项=值。dd默认从标准输入中读取,并写入到标准输出中,但可以用选项if(input file,输入文件)和of(output file,输出文件)改变。

用dd命令从标准输入读入用户输入到标准输出或者一个文件:

输出到文件 :

dd of=test bs=10 count=1

或者 dd if=/dev/stdin of=test bs=10 count=1

输出到标准输出:

dd if=/dev/stdin of=/dev/stdout bs=10 count=1

在输入完这个命令后,继续打字作为输入。

上述命令从标准输入设备读入用户输入(缺省值,所以可省略)然后输出到 test 文件,bs(block size)用于指定块大小(缺省单位为 Byte,也可为其指定如’K’,’M’,’G’等单位),count用于指定块数量。

指定只读取总共 10 个字节的数据,当输入了“hello shiyanlou”之后加上空格回车总共 16 个字节(一个英文字符占一个字节)内容,显然超过了设定大小。

使用du和cat命令看到的写入完成文件实际内容确实只有 10 个字节(黑底百分号表示这里没有换行符),而其他的多余输入将被截取并保留在标准输入。

du -b test

cat test

dd在拷贝的同时还可以实现数据转换,将输出的英文字符转换为大写再写入文件

dd if=/dev/stdin of=test bs=10 count=1 conv=ucase

使用dd 命令创建虚拟镜像文件 :

从 /dev/zero 设备创建一个容量为 256M的空文件 :

dd id=/dev/zero of=virtual.img bs=1M count=256

du -h virtual.img

输出 : 256M virtual.img

然后将文件格式化(写入文件系统)

使用 mkfs 命令格式化磁盘 :

使用刚才创建的虚拟磁盘镜像,输入 sudo mkfs ,然后按下tab键,可以看到许多以mkfs 为前缀的命令,后缀不同表示的是不同的文件系统,可以使用mkfs格式化成的文件系统。

将虚拟磁盘镜像格式化为 ext4 文件系统:

sudo mkfs.ext4 virtual.img

可以看到实际 mkfs.ext4 是使用 mke2fs 来完成格式化工作的。

如果你想知道 Linux 支持哪些文件系统你可以输入

ls -l /lib/modules/$(uname -r)/kernel/fs 查看。

使用 mount 命令挂载磁盘到目录树

用户在 Linux/UNIX 的机器上打开一个文件以前,包含该文件的文件系统必须先进行挂载的动作,此时用户要对该文件系统执行 mount 的指令以进行挂载。该指令通常是使用在 USB 或其他可移除存储设备上,而根目录则需要始终保持挂载的状态

又因为 Linux/UNIX 文件系统可以对应一个文件而不一定要是硬件设备,所以可以挂载一个包含文件系统的文件到目录树。

Linux/UNIX 命令行的 mount 指令是告诉操作系统,对应的文件系统已经准备好,可以使用了,而该文件系统会对应到一个特定的点(称为挂载点)。挂载好的文件、目录、设备以及特殊文件即可提供用户使用。

查看主机已经挂载的文件系统 :sudo mount

输出的结果中每一行表示一个设备或虚拟设备,每一行最前面是设备名,然后是 on 后面是挂载点,type 后面表示文件系统类型,再后面是挂载选项(比如可以在挂载时设定以只读方式挂载等)。

如何挂载真正的磁盘到目录树,格式 :

mount [options] [source] [directory]

常用 :

mount [-o[操作选项]] [-t 文件系统类型] [-w |– rw | –ro ] [文件系统源] [挂载点]

接着挂载创建的虚拟磁盘镜像到 /mnt 目录:

mount -o loop -t ext4 virtual.img /mnt

也可以省略挂载类型,mount 可以自动识别


4000
只读方式挂载 :


mount -o loop –ro virtual.img /mnt

或者Mount -o loop, ro virtual.img /mnt

使用 umount 命令卸载已挂载磁盘 :

命令格式 sudo umount 已挂载设备名或挂载点 :

sudo umount /mnt

/dev/loop :

在类 UNIX 系统中,/dev/loop(或称vnd (vnode disk)、lofi(循环文件接口))是一种伪设备,这种设备使得文件可以如同块设备一般被访问。

在使用之前,循环设备必须与现存文件系统上的文件相关联。这种关联将提供给用户一个应用程序接口,接口将允许文件视为块特殊文件(参见设备文件系统)使用。因此,如果文件中包含一个完整的文件系统,那么这个文件就能如同磁盘设备一般被挂载。

这种设备文件经常被用于光盘或是磁盘镜像。通过循环挂载来挂载包含文件系统的文件,便使处在这个文件系统中的文件得以被访问。这些文件将出现在挂载点目录。如果挂载目录中本身有文件,这些文件在挂载后将被禁止使用。

使用 fdisk 为磁盘分区 :

以物理主机为例说明如何为磁盘分区 :

查看硬盘分区表信息 :

sudo fdisk -l

输出结果中开头显示了主机上的磁盘的一些信息,包括容量扇区数,扇区大小,I/O 大小等信息。

重点看一下中间的分区信息,/dev/sda1,/dev/sda2 为主分区分别安装了 Windows 和 Linux 操作系统,/dev/sda3 为交换分区(可以理解为虚拟内存),/dev/sda4 为扩展分区其中包含 /dev/sda5,/dev/sda6,/dev/sda7,/dev/sda8 四个逻辑分区,因为主机上有几个分区之间有空隙,没有对齐边界扇区,所以分区之间的不是完全连续的。

进入磁盘分区模式 :

sudo fdisk virtual.img

在操作前规划好分区,例如使用128M (可用127M左右)的虚拟磁盘镜像创建一个 30M的主分区,剩余部分为扩展分区包含2个大约45M的逻辑分区 。

操作完成后输入P查看结果 。

最后输入W 写入分区表 。

使用 losetup 命令建立镜像与回环设备的关联 :

sudo losetup /dev/loop0 virtual.img

如果提示设备忙你也可以使用其他的回环设备 。

ls /dev/loop 参看所有的回环设备

解除设备关联 :

sudo losetup -d /dev/loop0

然后使用 mkfs 格式化各分区,前面是格式化整个虚拟磁盘镜像文件或磁盘, 不过格式化之前 ,还要为各分区建立虚拟设备的映射,使用 kpartx 工具 ,要先安装 :

sudo apt-get install kpartx

sudo kpartx -av /dev/loop0

取消映射 :

sudo kpartx -dv /dev/loop0

格式化为 ext4 :

sudo mkfs.ext4 -q /dev/mapper/loop0p1

格式化后在 /media 目录下新建四个空目录用于挂载虚拟磁盘:

mkdir -p /media/virtualdisk_{1..3}

挂载磁盘分区 :

sudo mount /dev/mapper/loop0p1 /media/virtualdisk_1



卸载磁盘分区 :

sudo umount /dev/mapper/loop0p1



使用 df -h 查看磁盘目录

@@:

==如何找出当前目录下占用最大的前十个文件==

du : 计算出单个文件或文件夹的磁盘空间占用

sort :对文件行或标准输出行记录排序后输出

head :输出文件内容的前面部分

du : -a 显示目录占用空间的大小 ,还有显示下面的目录占用空间的大小

sort : -n 按照字符串表示的数字值 来排序

-r :按照反序排序

head : -n 取出前多少行

所以 :

du -a |sort -n -r | head -n 10
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  文件系统 linux
相关文章推荐