目的: 生成一个NTFS文件系统,要求: 1、$MFT至少2个碎片 2、根目录下建90个以从1开始的数字编号为名的子目录,每个子目录下建80-100个文件,文件编号从1开始编起。 3、有大量文件是由2个或以上碎片组成。(本例多为2个碎片) 1、shell 脚本如下: #!/bin/sh # # # Created by www.frombyte.com 张宇 on 2017/3/29. # mkdir /mnt/padding cd /mnt/padding #第一段for,先创建30个子目录,每个目录下80-100个文件,大小为16K-48K,这一段基本连续 for((i=1;i<=30;i++));do mkdir /mnt/$i r1=$(($RANDOM % 20)) for((ii=1;ii<80+$r1;ii++));do r2=$(($RANDOM % 8 + 4)) dd if=/dev/urandom of=/mnt/$i/$ii bs=4096 count=$r2 done done #sleep 60 便于让文件系统flush sleep 60 #第二段for,使用dd把第一段for创建出的文件,从0-16K的位置,写入48K-80K,基本保证约2个碎片 for((i=1;i<=30;i++));do cd /mnt/$i r2=$(($RANDOM % 8 + 12)) r3=$(($RANDOM % 4)) for ii in `ls`;do r2=$(($RANDOM % 8 + 12)) dd if=/dev/urandom of=/mnt/$i/$ii bs=4096 seek=$r3 count=$r2 done done #填充65000个文件,这样可以使NTFS $MFT填充到第一个使用的数据区段,从而产生$MFT 碎片。 for((i=1;i<65000;i++));do touch $i done #后面两段for,作用同第一、第二段for,不出意外,这些文件的文件系统将写入$mft的第二个片断,更具备人为跟踪的知识全面性考察。 for((i=31;i<=90;i++));do mkdir /mnt/$i r1=$(($RANDOM % 20)) for((ii=1;ii<80+$r1;ii++));do r2=$(($RANDOM % 8 + 4)) dd if=/dev/urandom of=/mnt/$i/$ii bs=4096 count=$r2 done done sleep 60 for((i=31;i<=90;i++));do cd /mnt/$i r2=$(($RANDOM % 8 + 12)) r3=$(($RANDOM % 4)) for ii in `ls`;do r2=$(($RANDOM % 8 + 12)) dd if=/dev/urandom of=/mnt/$i/$ii bs=4096 seek=$r3 count=$r2 done done #删除padding,以免目录结构太臃肿 rm -rf /mnt/padding 2、在shell中执行如下命令: qemu-img create -f raw test2.img 1G qemu-nbd -f raw -c /dev/nbd0 test2.img fdisk /dev/nbd0 #此命令交互,目的为/dev/nbd0分个区,不想交互,可使用parted加参数 mkfs.ntfs -f /dev/nbd0p1 mount.ntfs-3g /dev/nbd0p1 /mnt /bin/bash run.sh 3、测试结果是否满意: 命令一:ntfscluster -f -I 0 /dev/nbd0p1 结果与预想相符,$mft果然为2个片断: Forced to continue. Dump: /$MFT 0x10 - resident 0x30 - resident 0x80 - non-resident VCN LCN Length 0 4 16387 16387 20488 1880 0xb0 - non-resident VCN LCN Length 0 2 2 2 16391 1 命令二:ntfscluster -f -F 1/ /dev/nbd0p1 结果与预想相符,抽样目录,也为2个片断 Forced to continue. Unnormalized path 1/ Dump: /1 0x10 - resident 0x30 - resident 0x50 - resident 0x90 - resident 0xa0 - non-resident VCN LCN Length 0 53328 2 2 49238 1 0xb0 - resident 命令三: ntfscluster -f -F 60/9 /dev/nbd0p1 结果与预想相符,抽样文件,也为2个片断 Forced to continue. Dump: /60/9 0x10 - resident 0x30 - resident 0x50 - resident 0x80 - non-resident VCN LCN Length 0 211991 8 8 115298 7