LINUX实 *** :Linux中生成考核用的NTFS文件系统

LINUX实 *** :Linux中生成考核用的NTFS文件系统,第1张

概述介绍《LINUX实 *** :Linux中生成考核用的NTFS文件系统》开发教程,希望对您有用。

《liNUX实 *** :linux中生成考核用的NTFS文件系统》要点:
本文介绍了liNUX实 *** :linux中生成考核用的NTFS文件系统,希望对您有用。如果有疑问,可以联系我们。

目标:

linux中生成一个NTFS文件体系,要求:

1、$MFT至少2个碎片

2、根目录下建90个以从1开端的数字编号为名的子目录,每个子目录下建80-100个文件,文件编号从1开端编起.

3、有年夜量文件是由2个或以上碎片组成.(本例多为2个碎片)

1、shell 剧本如下:

!/bin/sh
 
#  Script.sh

#
#  Created by 张宇 on 2017/3/29. 此脚本已包括后面的命令
#
mkdir ~/$1
cd ~/$1
qemu-img create -f raw $1.img 1G
qemu-nbd -f raw -c /dev/nbd0 $1.img
parted /dev/nbd0 mklabel msdos
parted /dev/nbd0 mkpart -s primary NTFS 128s 100%
mkfs.ntfs -f /dev/nbd0p1
mount.ntfs-3g /dev/nbd0p1 /mnt
#第一段for,先创建30个子目录,每个目录下80-100个文件,大小为16K-48K,这一段基本连续
for((i=1;i<=3;i++));do
 mkdir /mnt/$i
 r1=$(($RANDOM % 20))
 for((ii=1;ii<80+$r1;ii++));do
  r2=$(($RANDOM % 64 + 32))
  dd if=/dev/urandom of=/mnt/$i/$ii bs=512 count=$r2
 done
done
 
#sleep 60 便于让文件系统flush
#sleep 60
 
mkdir /mnt/padding
cd /mnt/padding
 
#填充65000个文件,这样可以使NTFS $MFT填充到第一个使用的数据区段,从而产生$MFT 碎片.
for((i=1;i<65000;i++));do
 touch $i
done
#创建出其他4-90子目录,这些文件会位于$MFT的第二个片断或以后
for((i=4;i<=90;i++));do
 mkdir /mnt/$i
 r1=$(($RANDOM % 20))
 for((ii=1;ii<80+$r1;ii++));do
  r2=$(($RANDOM % 64 + 32))
  dd if=/dev/urandom of=/mnt/$i/$ii bs=512 count=$r2
 done
done
#sleep 60
 
#第二段for,使用dd把第一段for创建出的文件,从0-16K的位置,写入48K-80K,基本保证>约2个碎片,子目录3下的文件是第一段$MFT下的文件,3之后的为$MFT第二个片断.
for((i=3;i<=90;i++));do
 cd /mnt/$i
 for ii in `ls`;do
  r2=$(($RANDOM % 64 + 96))
  r3=$(($RANDOM % 32))
  dd if=/dev/urandom of=/mnt/$i/$ii bs=512 seek=$r3 count=$r2
 done
done
 
#删除padding,以免目录结构太臃肿
rm -rf /mnt/padding
 
cd /mnt
find . -type f -print|xargs md5sum -b |tr a-z A-Z 1>~/$1/md5.List
for i in `find . -type f`;do ntfscluster -f -F $i /dev/nbd0p1;done 1>~/$1/file.info 2>/dev/null

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

4、生成所有文件的md5 哈希,便于生成考核谜底
cd /mnt
find . -type f -print|xargs md5sum -b |tr a-z A-Z

5、生成所有文件的碎片信息,便于生成考核谜底
cd /mnt
for i in `find . -type f`;do ntfscluster -f -F $i /dev/nbd0p1;done 2>/dev/null

6、生成目录的碎片信息,便于生成考核谜底
cd /mnt
for i in `find . -type d`;do ntfscluster -f -F $i /dev/nbd0p1;done 2>/dev/null

7、生成元文件的文件记录信息,便于生成考核谜底
 for((i=0;i<16;i++));do ntfscluster -f -I $i /dev/nbd0p1;done 2>/dev/null

    或者通过敕令:ntfscluster -i -f /dev/nbd0p1,
    查看如下值:initialized mft records : 73115

    再执行,下面命令即可将所有文件的碎片信息打印出来,再做加工,即可生成考核谜底

 for((i=0;i<73115;i++));do ntfscluster -f -I $i /dev/nbd0p1;done 2>/dev/null

ntfs-3g源码改动:
1、ntfscluster.c 400行while改为如下,目的是便于输出成果用grep,sed或awk加工
    while ((rec = find_attribute(AT_UNUSED,ctx))) {
                ntfs_log_info("    0x%02x - ",(int)le32_to_cpu(rec->type));
                if (rec->non_resIDent) {
                        ntfs_log_info("non-resIDent\n");
                        runs = ntfs_mapPing_pairs_decompress(vol,rec,NulL);
                        if (runs) {
                                ntfs_log_info("            INODE  ATTR    RUN#      VCN      LCN  Length\n");
                                for (i = 0; runs[i].length > 0; i++) {
                                        ntfs_log_info("          %8lld  0x%02x %8lld %8lld %8lld %8lld\n",
                                                        (long long)(ino->mft_no & 0x0000FFFFFFFFFFFFul),
                                                        (int)le32_to_cpu(rec->type),
                                                        (long long)i,
                                                        (long long)runs[i].vcn,
                                                        (long long)runs[i].lcn,
                                                        (long long)
                                                        runs[i].length);
                                }
                                ntfs_log_info("            [INFO]:0x%02xRuns:%d,Inode:%lld,path:%s\n",
                                                        i,
                                                        buffer);
                                free(runs);
                        }
                } else {
                        ntfs_log_info("resIDent\n");
                }
        }

成果将如下:
Dump: /50/3
    0x10 - resIDent
    0x30 - resIDent
    0x50 - resIDent
    0x80 - non-resIDent
            INODE  ATTR    RUN#    VCN    LCN    Length
          69425    0x80        0        0  194588        9
          69425    0x80        1        9  217183        8
            [INFO]:0x80Runs:2,Inode:69425,path:/50/3

考题及答案生成部门:
1、$MFT:$DATA
2、$MFT:$BITMAP
3、在$MFT第一个片断中的,拥有$DATA:RUNList唯一一条记录的文件,回答其MD5
4、在$MFT第二个片断中的,拥有$DATA:RUNList两条记录的文件,回答其MD5
5、读取某个拥有至少2个A0属性的目录块的MD5
6、给定一个起始簇号,解释一个RUNList的前3条记录(样本中至少有3条记录)
7、恢复一个删除的文件 (可生成答案后,删除某个目录,再恢复其下面的某个文件即可)

相关附件可以到linux公社资源站下载:

------------------------------------------朋分线------------------------------------------

免费下载地址在 http://linux.linuxIDc.com/

用户名与暗码都是www.linuxIDc.com

具体下载目录在 /2017年材料/6月/4日/linux中生成考核用的NTFS文件系统/

下载办法见

------------------------------------------朋分线------------------------------------------

本文永远更新链接地址

更多liNUX教程,尽在内存溢出PHP学院专栏。欢迎交流《liNUX实 *** :linux中生成考核用的NTFS文件系统》!

总结

以上是内存溢出为你收集整理的LINUX实 *** :Linux中生成考核用的NTFS文件系统全部内容,希望文章能够帮你解决LINUX实 *** :Linux中生成考核用的NTFS文件系统所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1041674.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存