最近,项目中需要完成这样的一个任务:需要挂在一个磁盘,在这个磁盘中存放一个文件,除了这些文件之外,我们希望该磁盘的其他部分都被随机数据填充-----我们不想在这个磁盘上,除了该文件外还能存放其他文件,也不希望留给敌手存放其他文件的空间。
通过查询资料,我知道需要了解 dd命令
、磁盘挂载等知识。
想法
我的想法是:
- 先创建一个文件夹,限制该文件夹的大小。实现方式就是,创建一个20 M大小的磁盘镜像,挂载到文件夹下,这样这个文件夹的大小就限制死了。
- 对该文件,先填充自己需要的文件。
- 填充好必须的,自己需要的文件后,开始填充乱码。
实现方式如下:
利用 /dev/urandom
进行格式化
/dev/urandom
,它是“随机数设备”,它的本领就是可以生成理论意义上的随机数。
如果我们想清除硬盘里的某些机密数据,就可以使用 /dev/urandom
这个随机数生成器来产生随机数据,写到磁盘上,以确保将磁盘原始数据完全覆盖掉。
dd if=/dev/urandom of=/dev/sdav
dd
可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。参数说明:
- if=文件名:输入文件名,默认为标准输入。即指定源文件。
- of=文件名:输出文件名,默认为标准输出。即指定目的文件。(注意,这个是文件,不是文件夹)
如何限制文件夹大小
Linux 上有时由于一些特殊的用途,我们需要限制一个文件夹的大小。核心方法都是把需要限制的文件夹挂载在一个大小固定的分区上。
我们可以使用镜像文件挂载的方式
# 生成一个10M的文件
dd if=/dev/zero of=disk.img bs=1M count=10
# 把生成的文件虚拟为块设备
losetup /dev/loop0 disk.img
# 格式化设备
mkfs.ext4 /dev/loop0
# 挂载
mount disk.img testdir
# 卸载
umount testdit
# 卸载loop设备与文件的关联
losetup -d /dev/loop0
实践用例:
# 创建了一个大小为20M的磁盘镜像
root@cchui-virtual-machine:~# dd if=/dev/zero of=/root/disk.img bs=2M count=10
记录了10+0 的读入
记录了10+0 的写出
20971520 bytes (21 MB, 20 MiB) copied, 0.13234 s, 158 MB/s
--------------------------------------------------------------------------------
# 挂载为设备
root@cchui-virtual-machine:~# losetup /dev/loop0 /root/disk.img
--------------------------------------------------------------------------------
# 格式化设备
root@cchui-virtual-machine:~# mkfs.ext3 /dev/loop0
mke2fs 1.44.1 (24-Mar-2018)
丢弃设备块: 完成
创建含有 20480 个块(每块 1k)和 5136 个inode的文件系统
文件系统UUID:75fe11a2-e627-4def-a5e8-042d2ffa3b5d
超级块的备份存储于下列块:
8193
正在分配组表: 完成
正在写入inode表: 完成
创建日志(1024 个块) 完成
写入超级块和文件系统账户统计信息: 已完成
--------------------------------------------------------------------------------
# 挂载为文件夹
root@cchui-virtual-machine:~# mkdir agent
root@cchui-virtual-machine:~# mount -t ext3 /dev/loop0 /root/agent/
查看文件夹大小,查看磁盘大小的 Linux 命令:
df -h
磁盘填充
开始填充前:
root@cchui-virtual-machine:~# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda1 40G 20G 18G 53% /
......
/dev/loop0 19M 179K 18M 2% /root/agent ###挂载的磁盘
root@cchui-virtual-machine:~/agent# ls ####磁盘下的文件和目录
copyrightDemo.sol lost+found
开始填充:
root@cchui-virtual-machine:~/agent# dd if=/dev/urandom of=/root/agent/test.txt
dd: 正在写入'/root/agent/test.txt': 设备上没有空间
记录了37101+0 的读入
记录了37100+0 的写出
18995200 bytes (19 MB, 18 MiB) copied, 0.620289 s, 30.6 MB/s
填充后:
root@cchui-virtual-machine:~# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda1 40G 20G 18G 53% /
......
/dev/loop0 19M 19M 0 100% /root/agent ##该磁盘以及被填充满了
root@cchui-virtual-machine:~/agent# ls
copyrightDemo.sol lost+found test.txt ## test.txt 文件里面是乱码