LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: weixiao

RH7.3最终汉化实例与RedHat软件设置

[复制链接]
发表于 2007-7-3 15:56:19 | 显示全部楼层

=== VMware + LFS系统 + nasm 笔记 ===

安装nasm源码包
# cd /sources
# tar -xvf nasm-0.99.01.tar.tar
# cd nasm-0.99.01
# more INSTALL

# ./configure
# make
# make install

创建以下4个文件:
/usr/local/bin/{nasm,ndisasm} , /usr/local/man/man1/{nasm.1,ndisasm.1}

# cd
# file /usr/local/bin/nasm
nasm: ELF 32-bit LSB executable, Intel 80386,version 1 (SYSV)..................
[ 系统属于‘ELF’格式 ]

1) nasm操作例子:
由于LFS系统没有进行‘进阶设置’(例如 BLFS相关配置),执行命令时采用绝对路径形式。以下例子中程序来源‘骇客基地’(www.hookbase.com),《Linux和ELF文件格式汇编语言教程》文档。

# cd
# vi hello.asm
---------------------------------------
BITS32
section .text
global _start
_start:
mov eax,4
mov ebx,1
mov ecx,message
mov edx,23
int 80h
mov eax,1
mov ebx,0
int 80h
section .data
message db "hello Linux world !",13,10,0
section .bss
---------------------------------------

# /usr/local/bin/nasm -f elf hello.asm
# ld -o hello hello.o
# ./hello
hello Linux world !

参考 NASM中文手册
# /usr/local/bin/nasm -f coff hello.asm -l my1.lst
# /usr/local/bin/nasm -f elf hello.asm -l my2.lst
# cat my2.lst

2) nasm操作例子:
# vi chapter1_boot.asm
----------------------------------------
org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 16
mov ax, 01301h
mov bx, 000ch
mov dl, 0
int 10h
ret
BootMessage: db "Hello, OS world!"
times 510-($-$$) db 0
dw 0xaa55
----------------------------------------

# /usr/local/bin/nasm chapter1_boot.asm -o boot.bin

# hexdump boot.bin -n 512
# hexdump boot.bin -C

反汇编
# /usr/local/bin/ndisasm -o 0x7c00 boot.bin > disboot.asm

制作引导盘:
VMware菜单> VM > Floppy > Use floppy image > Create 创建软盘文件boot.flp,然后Connect

# dd if=boot.bin of=/dev/fd0
1+0 records in
1+0 records out

# hexdump /dev/fd0 -n 512

然后启动进行测试
正常显示红色字 Hello, OS world!

[ 注 RH7.3系统安装套件中有 nasm RPM包,能进行以上操作 ]

注:参考《自己动手写操作系统》(OS_DIY.pdf)第一章测试部分。尝试用LFS系统替代工作环境,学习其中的内容。

==
--
回复 支持 反对

使用道具 举报

发表于 2007-7-10 18:47:44 | 显示全部楼层

Red Hat Linux下的 Nmapfe 软件使用

操作环境:
一台计算机,主操作系统为 Win XP,没设防火墙。RH Linux 为VMware虚拟机操作系统,桥接网络,没设置防火墙。两者正常连接网络。

网关:192.168.1.1
子网掩码:255.255.255.0
WinXP的IP:192.168.1.19
RH Linux的IP:192.168.1.9

普通帐户登录 X
RH -> 主菜单 -> 程序 -> Utilities -> Nmapfe

打开Nmapfe界面:
-------------------------------------------------------------
Host(s)文本框 --> 输入要扫描目标主机或子网段,如:192.168.1.9,192.168.1.*

====Scan Options(扫描类型的单选项设置)====
connect() --> -sT TCP连接扫描,利用 connect() 系统调用,分别对目标主机的端口作连接扫描.
Ping Sweep --> -sP Ping扫描,用ICMP的 ECHO request 信息包或 Tcp 的 ACK 包寻找开放的主机.( root 权限时, nmap 把两种包并施 )
Bounce Scan --> -b 使用 ftp 代理服务器,若选这项目,要填进这格式:username:password@server:port

[注:root 使用 nmapfe 扫描类型还有:syn stealth,UDP port scan,fin stealth]

====General Options: (常规选项)====
Dont't Resolve --> -n 不对开放的主机作DNS逆向解析
Fast Scan --> -F 快速扫描,扫描 Nmap的端口列表(/usr/share/nmap/nmap-services),扫描1095个端口比扫描系统1549个端口要快,所以称快速扫描
Range of ports --> -p 指定要扫描的端口,填写格式如:25,80

Tcp Ping --> -PT 进行扫描类型前用 Ping (tcp ACK) 检测目标主机是否开放
Don't Ping --> -P0 进行扫描类型前不用 Ping (icmp echo)检测目标主机
Input File --> -i 从input file 读入多个目标主机或目标网络,中间用空格,TAB,换行符分隔

Get Identd Info --> -I 开启 Tcp 逆向 identd 扫描.针对Web服务器
Resolve All --> -R 总是在目标主机上进行DNS逆向解析
-------------------------------------------------------------

====操作测试====
Hosts---127.0.0.1
Scan Options: Ping Sweep
General Options: Tcp ping

Output from: nmap -sP -PT 127.0.0.1
[ 按Scan,重复按为Stop ]

把Output from设置为: nmap -sT -PT 127.0.0.1
[ 按Scan ,记录框显示本机待配置的端口 ]

====菜单栏 Output ====
选取Verbose Output --> 输出为详细模式 --> Scan
如: Output from: nmap -sT -PT -v 127.0.0.1

选取Append Output --> 记录框内不清屏,追加记录显示
选取Machine Parsable Log --> 用用户目录下的默认文件 ~/parsable.log 记录机器可解析的结果
如: Output from: nmap -sT -m parsable.log -PT 127.0.0.1
$ more ~/parsable.log


菜单栏 View --> 用颜色显示标注服务类型
菜单栏 File --> 存取扫描结果的记录文件(如:~/parsable.log)

==== 对主操作系统 Windows XP 扫描测试 ====

Windows or RedHat Linux 没有设置防火墙,网络连接状态正常。虚拟机配置为桥接网络。

若启动虚拟机时出现“VMnet 0 没有启动”提示,进入RH7.3系统后,检查Ethernet状态:
VMware菜单栏 -> VM -> Removable Devices -> Ethernet -> connect(连接)or Disconnect(断开)

打开终端:
$ su -
# ifconfig
[
若没有eth0 网络状态显示,执行以下:
# /etc/rc.d/init.d/network restart
# ifconfig
]

Nmapfe界面:
Host --> 192.168.1.*
Output from: nmap -sP -PT 192.168.1.*
按 Scan
--------------------------------------------
Starting nmap V. 2.54BETA31 ( www.insecure.org/nmap/ )
Warning: You are not root -- using TCP pingscan rather than ICMP
Host (192.168.1.1) appears to be up.
Host (192.168.1.9) appears to be up.
Host (192.168.1.19) appears to be up.

Nmap run completed -- 256 IP addresses (3 hosts up) scanned in 15 seconds
--------------------------------------------

发现网段有活动的主机,选择单一主机进行端口扫描:
Output from:nmap -sT -PT 192.168.1.19
--------------------------------------------
Starting nmap V. 2.54BETA31 ( www.insecure.org/nmap/ )
Warning: You are not root -- using TCP pingscan rather than ICMP
Interesting ports on (192.168.1.19):
(The 1549 ports scanned but not shown below are in state: closed)
Port State Service
135/tcp open loc-srv
139/tcp open netbios-ssn
445/tcp open microsoft-ds
1025/tcp open listen
5000/tcp open fics


Nmap run completed -- 1 IP address (1 host up) scanned in 6 seconds

--------------------------------------------

Windows XP --> 网络连接 --> 本地连接 --> 属性[ 高级 --> 选‘连接防火墙’--> 设置 ]
[安全日志 --> 选‘记录被丢弃的包’和‘记录成功的连接’--> 确定]

RH Linux --> Nmapfe [Output from:nmap -sP -PT 192.168.1.19] --> 按 Scan
--------------------------------------------
Starting nmap V. 2.54BETA31 ( www.insecure.org/nmap/ )
Warning: You are not root -- using TCP pingscan rather than ICMP
Note: Host seems down. If it is really up, but blocking our ping probes, try -P0

Nmap run completed -- 1 IP address (0 hosts up) scanned in 40 seconds
--------------------------------------------

Ping Sweep 扫描失败,查看WinXP防火墙日志文件
Windows XP --> ‘运行’‘C:\WINDOWS\pfirewall.log’
......................
......................

[
注:使用Nmapfe全部功能:
$ su -
# nmapfe &
]



==-----:confused:  ==
回复 支持 反对

使用道具 举报

发表于 2007-7-10 19:04:12 | 显示全部楼层

== LFS系统 制作 Parted disk (属于utility disk)==

一 编译并安装新版本parted
下载新版本parted-1.8.7.tar.gz (http://ftp.gnu.org/gnu/parted
[ 注:新版本parted 需要在‘内核版本 > 2.6.6’的平台上运行 ]

LFS系统编译 parted(缩简依赖,放入软盘)
# tar -xvf parted-1.8.7.tar.gz
# cd parted-1.8.7
# ./configure --without-readline --disable-nls --disable-shared --enable-all-static
# make
# make install

查找新安装的文件
# find /usr -cmin -10

注: GNU Parted User Manual(/usr/local/share/info/parted.info)

二 制作 Parted disk 软盘

Insert a floppy,然后格式化ext2文件系统:
# mke2fs /dev/fd0

#############
或者尝试parted程式格式化ext2文件系统:

# /usr/local/sbin/parted /dev/fd0
GNU parted 1.8.7
Using /dev/fd0
Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) help

(parted) mklabel loop

(parted) mkpartfs primary ext2 0 1.4
File system type? [ext2]? ext2
Start? 0
End? 1.4
Error: ..........................................
.................................................
Ignore/Cancel? Ignore

(parted) print
(parted) quit

[ 由于parted编译时缩简依赖,资料上‘parted /dev/fd0 mklabel loop mkpartfs primary ext2 0 1.4 ’不能直接操作 ]
#############

# dumpe2fs /dev/fd0

复制parted工具
# mount -t ext2 /dev/fd0 /mnt/floppy
# cp /usr/local/sbin/parted /mnt/floppy/parted.static
# umount /mnt/floppy

三 测试新版本parted程式
  找一个‘内核版本 > 2.6.6’的平台,或者LiveCD(例如 lfslivecd-x86-6.1.1-4)

  lfslivecd-x86-6.1.1-4介质启动机器,进入console

# [ -d /mnt/floppy ] || mkdir /mnt/floppy
# mount -t ext2 /dev/fd0 /mnt/floppy

# fdisk -l

例子:
# /mnt/floppy/parted.static /dev/sda
GNU parted 1.8.7
.........................
(parted) print
(parted) check 1
(parted) quit
# umount /mnt/floppy

[ 注: utility disk有时是用来测试新版本程式的功能,lfslivecd本身内置parted程式(1.6.25.1) ,能直接执行命令行,如‘parted /dev/fd0 mklabel loop mkpartfs primary ext2 0 1.4 ’]

四 关于‘utility disk ’中的工具程式不一定都要重新编译。例如,将RH7.3系统/usr/bin/hexedit直接复制到软盘。

===
Linux启动盘
Linux启动软盘分为 boot盘 和 boot/root盘。
boot盘用来启动已经安装在硬盘上的系统。
boot/root盘本身就是一个小型Linux系统的组合,平时用在系统修复。

==
收录:一般而言,当我们提及 建造一张 bootdisk 时,是指造出 boot ( kernel ) 与 root (files) 这两个部分。这两个部分不是放在一起 (一张单张的boot/root disk) ,就是两张分开的磁片 (boot + root disk) 。对 Rescue磁片而言最具弹性之做法,可能是使用两张分开的 boot 与 root 磁片,再加上一张或多张的 utility disk 以处理多出来的东西。

==
作为替代,RH7.3安装光盘(或者流行的LiveCD)不仅包装‘boot/root disk’功能,而且内置utillty,例如 parted 等。

===
回复 支持 反对

使用道具 举报

发表于 2007-7-10 19:09:16 | 显示全部楼层

== Gnu parted程式 在软盘上建立ext2文件系统的例子 ==

## parted帮助手册, RH7.3 系统 >  /usr/share/doc/parted-1.4.24/USER

一。 RH7.3系统操作parted程式,软盘上建立ext2文件系统

  参考命令行‘parted /dev/fd0 mklabel loop mkpartfs primary ext2 0 1.4 ’
  parted程式内订一套计量数值,参数‘1.4’是新版本parted针对软盘采用,若RH7.3系统操作以上命令行,‘Block count’数值会变小。实际操作:

# parted /dev/fd0
-------------------------------------------------
(parted) mklabel loop
(parted) print
Disk geometry for /dev/fd0: 0.000-1.406 megabytes
Disk label type: loop
Minor    Start       End     Filesystem  Flags

(parted) quit
-------------------------------------------------

格式化ext2文件系统
# parted /dev/fd0 mklabel loop mkpartfs primary ext2 0 1.406

# dumpe2fs /dev/fd0

二。 parted程式跟 mke2fs命令在软盘上建立ext2文件系统的分别
mke2fs > Inode count: 184 ,Block count: 1440,Inodes per group: 184,Inode blocks per group: 23

parted程式 > Inode count: 720,Block count: 1440,Inodes per group: 720,Inode blocks per group: 90
还有hexdump显示引导记录包含‘GNU Parted Loopback 0’信息,offset(0017c00)进入数据块等。

三。 mke2fs命令仿效 parted程式建立ext2文件系统
# mke2fs -N 720 /dev/fd0

[ 推荐阅读《Ext2文件系统的内部布局》 ]

四。 交流 GNUparted 在硬盘上创建ext2文件系统
  RH7.3系统安装过程中需要选择 分区程序 ,‘Disk Druid’正是采用parted主程式,现在替换成GNUparted分区编辑器。parted程式除了分区和格式化文件系统,较实用是调整分区大小。

a 遇到的实践例子:
  LFS系统依照文档,cfdisk/fdisk 程式分区,mke2fs格式化ext2文件系统。若LFS系统成功安装,打算用parted程式调整某分区Size,进入交互操作模式:

---------------------------------
(parted) check 1
No Implementation: This ext2 file system has a rather strange layout!  Parted can't resize this (yet).
---------------------------------

  翻阅faq文档( http://www.gnu.org/software/parted/index.shtml ) ,有叙述‘No Implementation’问题,并答案在新版本parted 。

[ 注:my实践中发现parted程式调整分区大小,则分区是由 GNUparted分区和格式化文件系统 。]

b 例子:
  尝试 pmagic-1.7.iso 给硬盘分区并格式化文件系统,hexdump观察硬盘区块,有代码进驻。

=====
-----
回复 支持 反对

使用道具 举报

发表于 2007-8-3 19:46:05 | 显示全部楼层

摸索 dump/restore 程式

=== 创建 用户工作目录的软盘分区 ===

操作环境: 一个 / 分区和 Swap分区
前提:软盘介质可以选择真实软盘,该例使用VMware提供‘name.flp’

# groupadd Tdump
# mkdir /home/Tdump

# mount -t ext2 /dev/fd0 /home/Tdump
# useradd -g Tdump -d /home/Tdump -c "Test Dump" Tdump

# umount /home/Tdump
# chown Tdump:Tdump /home/Tdump
# chmod 700 /home/Tdump

# passwd Tdump

# vi /etc/fstab
修改如下:
/dev/fd0 /home/Tdump ext2 defaults 0 2

尝试操作
# mount /home/Tdump
# echo hello > /home/Tdump/hello.txt
# touch /home/Tdump/td.txt

# su - Tdump
$ mkdir /home/Tdump/mydir
$ date > /home/Tdump/create.file
$ exit
#

=== 1) 尝试 dump/restore 程式,前提是 备份/还原 操作时,Tdump用户没有登录系统 ===

安装 dump/restore 程式
# cd /tmp
# rpm -ivh /mnt/cdrom/RedHat/RPMS/dump-0.4b27-3.i386.rpm
# rpm -ql dump

# cat /etc/dumpdates
[ note: 或者使用‘> /etc/dumpdates’清空文件内容 ]

# mkdir /backup
[ 注:正规操作 ‘/backup’是备份设备挂载点。该例属于尝试dump程式,只在目录下创建备份档案。]

=== Sunday = level 0 完整备份 /home/Tdump文件系统

估算备份档案占用空间
# dump -0 -S /home/Tdump

level 0 完整备份 (Sunday)
# dump -0 -u -f /backup/home_Tdump-full.dump /home/Tdump/
DUMP: Date of this level 0 dump: Sun Jul 29 08:54:50 2007
DUMP: Dumping /dev/fd0 (/home/Tdump) to /backup/home_Tdump-full.dump
DUMP: Added inode 7 to exclude list (resize inode)
DUMP: Label: none
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 47 tape blocks.
DUMP: Volume 1 started with block 1 at: Sun Jul 29 08:54:50 2007
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: Closing /backup/home_Tdump-full.dump
DUMP: Volume 1 completed at: Sun Jul 29 08:54:50 2007
DUMP: Volume 1 30 tape blocks (0.03MB)
DUMP: 30 tape blocks (0.03MB) on 1 volume(s)
DUMP: finished in less than a second
DUMP: Date of this level 0 dump: Sun Jul 29 08:54:50 2007
DUMP: Date this dump completed: Sun Jul 29 08:54:50 2007
DUMP: Average transfer rate: 0 kB/s
DUMP: DUMP IS DONE

检查备份档案信息
# cat /etc/dumpdates
/dev/fd0 0 Sun Jul 29 08:54:50 2007

# restore -t -f /backup/home_Tdump-full.dump

[ 注: 程式 dump/restore 属于备份文件系统工具,能理解成备份 分区 。他不仅备份系统上数据,还备份文件系统信息,如 inode信息等 ]

=== Monday = level 1 操作增量备份 /home/Tdump 文件系统(分区)

创建样品文件
# mount -l
# date > /home/Tdump/inc-test.txt

level 1 增量备份 (Monday)
# dump -1 -u -f /backup/home_Tdump-inc_Mon.dump /home/Tdump
DUMP: Date of this level 1 dump: Mon Jul 30 08:34:56 2007
DUMP: Date of last level 0 dump: Sun Jul 29 08:54:50 2007
DUMP: Dumping /dev/fd0 (/home/Tdump) to /backup/home_Tdump-inc_Mon.dump
DUMP: Added inode 7 to exclude list (resize inode)
DUMP: Label: none
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 19 tape blocks.
DUMP: Volume 1 started with block 1 at: Mon Jul 30 08:34:56 2007
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: Closing /backup/home_Tdump-inc_Mon.dump
DUMP: Volume 1 completed at: Mon Jul 30 08:34:56 2007
DUMP: Volume 1 10 tape blocks (0.01MB)
DUMP: 10 tape blocks (0.01MB) on 1 volume(s)
DUMP: finished in less than a second
DUMP: Date of this level 1 dump: Mon Jul 30 08:34:56 2007
DUMP: Date this dump completed: Mon Jul 30 08:34:56 2007
DUMP: Average transfer rate: 0 kB/s
DUMP: DUMP IS DONE

# cat /etc/dumpdates
/dev/fd0 0 Sun Jul 29 08:54:50 2007
/dev/fd0 1 Mon Jul 30 08:34:56 2007

[ 注: 选项中 0-9 级别,0级属于完整备份,1-9属于增量备份,是为不同的备份策略而设计。 ]
[ 注: 选项 -u 是指备份完毕后,在/etc/dumpdates 更新记录。 ]

查看增量备份档案
# file /backup/home_Tdump-inc_Mon.dump
# restore -t -f /backup/home_Tdump-inc_Mon.dump
Dump date: Mon Jul 30 08:34:56 2007
Dumped from: Sun Jul 29 08:54:50 2007
Level 1 dump of /home/Tdump on wei:/dev/fd0
Label: none
2 .
21 ./inc-test.txt

查看 档案Size
# ls -lh /backup/

=== Tuesday = level 1 操作增量备份 /home/Tdump 文件系统(分区)

说明:该例子备份策略,星期日 0级完整备份,星期一至星期六进行 1级(level 1)增量备份。

纯属探索dump备份工具,需要了解一些信息
# date +%A
星期二
# busybox date +%A
Tuesday

# ls /backup/ ; echo '----- # --- # -----' ; cat /etc/dumpdates
home_Tdump-full.dump home_Tdump-inc_Mon.dump
----- # --- # -----
/dev/fd0 0 Sun Jul 29 08:54:50 2007
/dev/fd0 1 Mon Jul 30 08:34:56 2007

制作关键文件 /etc/dumpdates 的副本
# cp /etc/dumpdates /root/dumpdates.Tues_bak
[ note: file命令能检验备份档案中的日期 ]

制作测试文件
# cat /etc/dumpdates > /home/Tdump/Tues-test.txt
# chown Tdump:root /home/Tdump/Tues-test.txt
# ls -l /home/Tdump/

level 1 增量备份 (Tuesday)
# dump -1 -u -f /backup/home_Tdump-inc_Tues.dump /home/Tdump/
DUMP: Date of this level 1 dump: Tue Jul 31 08:40:24 2007
DUMP: Date of last level 0 dump: Sun Jul 29 08:54:50 2007
DUMP: Dumping /dev/fd0 (/home/Tdump) to /backup/home_Tdump-inc_Tues.dump
DUMP: Added inode 7 to exclude list (resize inode)
DUMP: Label: none
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 23 tape blocks.
DUMP: Volume 1 started with block 1 at: Tue Jul 31 08:40:24 2007
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: Closing /backup/home_Tdump-inc_Tues.dump
DUMP: Volume 1 completed at: Tue Jul 31 08:40:24 2007
DUMP: Volume 1 20 tape blocks (0.02MB)
DUMP: 20 tape blocks (0.02MB) on 1 volume(s)
DUMP: finished in less than a second
DUMP: Date of this level 1 dump: Tue Jul 31 08:40:24 2007
DUMP: Date this dump completed: Tue Jul 31 08:40:24 2007
DUMP: Average transfer rate: 0 kB/s
DUMP: DUMP IS DONE

# ls /backup/ ; echo '----- # --- # -----' ; cat /etc/dumpdates
home_Tdump-full.dump home_Tdump-inc_Mon.dump home_Tdump-inc_Tues.dump
----- # --- # -----
/dev/fd0 0 Sun Jul 29 08:54:50 2007
/dev/fd0 1 Tue Jul 31 08:40:24 2007
[ 注:相同级别(level 1)进行增量备份后,更新记录 少了Monday备份的记录信息 ]

查看新的增量备份档案
# restore -t -f /backup/home_Tdump-inc_Tues.dump
Dump date: Tue Jul 31 08:40:24 2007
Dumped from: Sun Jul 29 08:54:50 2007
Level 1 dump of /home/Tdump on wei:/dev/fd0
Label: none
2 .
21 ./inc-test.txt
22 ./Tues-test.txt
[ 注: 最新的1级增量备份包含Monday备份中的inc-test.txt ]

!!选择测试 Tuesday 操作 level 2 增量备份

制作 Tuesday 操作 level 1备份的记录副本
# cp /etc/dumpdates /root/dumpdates.wei_bak

还原 测试文件 ( dumpdates.Tues_bak )
# cp /root/dumpdates.Tues_bak /etc/dumpdates
# dump -2 -u -f /tmp/level_2-inc_Tues.dump /home/Tdump/

# cat /etc/dumpdates
/dev/fd0 0 Sun Jul 29 08:54:50 2007
/dev/fd0 1 Mon Jul 30 08:34:56 2007
/dev/fd0 2 Tue Jul 31 09:03:57 2007

# restore -t -f /tmp/level_2-inc_Tues.dump
Dump date: Tue Jul 31 09:03:57 2007
Dumped from: Mon Jul 30 08:34:56 2007
Level 2 dump of /home/Tdump on wei:/dev/fd0
Label: none
2 .
22 ./Tues-test.txt

还原 Tuesday 操作 level 1备份的记录副本
# cp /root/dumpdates.wei_bak /etc/dumpdates
# cat /etc/dumpdates
/dev/fd0 0 Sun Jul 29 08:54:50 2007
/dev/fd0 1 Tue Jul 31 08:40:24 2007

!! 选择测试完毕

======== 收集 “FreeBSD连载(32):系统备份”文档的 笔记 =======

  完全备份:每隔一定时间就对系统进行一次全面的备份,这样在备份间隔期间出现数据丢失等问题,可以使用上一次 的备份数据恢复到前次备份时情况。这是最基本的备份方式,但是每次都需要备份所有的数据,并且每次备份的工作量也很大 大,需要太多的备份介质,因此这种备份不能进行的太频繁,只能每隔一段较长时间才进行一次完整的备份,例如以一个月为 一个备份周期。但是这样一旦发生数据丢失,只能恢复到上次备份的数据,这个月内更新的数据就有可能丢失。
[ note: 上例中‘level 0 完整备份’]

  增量备份:首先进行一次完全备份,然后每隔一个较短时间进行一次备份,但仅仅备份在这个期间更改的内容。当经 过一个较长的时间后再重新进行一次完全备份,开始前面的循环过程。由于只有每个备份周期的第一次进行完全备份,其他只 进行改变的文件的备份,因此工作量小,就能够进行更频繁的备份。例如以一个月为一个周期,一个月进行一次完全备份,每 天晚上0点进行这一天改变的数据备份。这样一旦发生数据丢失,首先恢复前一个完全备份,然后按日期一个一个恢复每天的 备份,就能恢复到前一天的情况。这种备份方法比较经济。
[ note: 上例中‘选择测试 Tuesday 操作 level 2 增量备份’。策略 Sun(level 0) + Mon(level 1) + Tues(level 2) ]

  更新备份:这种备份方法与增量备份相似,首先每月进行一次完全备份,然后每天进行一次更新数据的备份。但不同 在于,增量备份是备份该天更改的数据,而更新备份是备份从上次进行完全备份后更改的全部数据文件。一旦发生数据丢失, 可以使用前一个完全备份恢复到前一个月的状态,再使用前一个更新备份恢复到前一天的情况。这样做的缺点是每次作小备份 工作的任务比增量备份的工作量要大,但好处在于,增量备份每天都有备份,因此要保存数据备份数量太多,而更新备份则不 然,只需保存一个完全备份和一个更新备份就可以恢复故障以前的状态。另外在进行恢复工作时,增量备份要顺序进行多次备 份的恢复,而更新备份只需两次恢复,因此它的恢复工作相对简单。
[ note: 上例‘level 1 操作增量备份’其实是文档叙述的更新备份。策略 Sun(level 0) + Mon(level 1) + Tues(level 1) ]

  增量备份和更新备份都能以比较经济的方式对系统进行完全备份,在这些不同的策略之间进行选择不但与系统数据更 新的方式相关,也依赖于管理员的习惯。通常在系统数据更新不是太频繁的话,可以选用更新备份的方式。但是如果系统数据 更新太快,使每个备份周期后面几次更新备份的数据量已经相当大,这样使用更新备份已经不太经济了。这时候可以考虑增量 备份或混用更新备份和增量备份的方式,或者缩短备份周期。

==============
回复 支持 反对

使用道具 举报

发表于 2007-8-3 20:07:22 | 显示全部楼层

=== 2) 尝试 dump/restore 程式,前提是 备份/还原 操作时,Tdump用户没有登录系统 ===

续上例‘Tuesday操作增量备份(level 1)’,显示当前备份信息
# ls /backup/ ;echo '----- # --- # -----' ; cat /etc/dumpdates
home_Tdump-full.dump home_Tdump-inc_Mon.dump home_Tdump-inc_Tues.dump
----- # --- # -----
/dev/fd0 0 Sun Jul 29 08:54:50 2007
/dev/fd0 1 Tue Jul 31 08:40:24 2007

=== 尝试 restore程式还原文件系统(分区)

# df
Filesystem ___ 1k-blocks ______ Used ___ Available __ Use% Mounted on
/dev/sda1 ____ 3731736 _____ 2615640 ___ 926532 ______ 74% /
/dev/fd0 ________ 1412 ________ 23 _______ 1317 _______ 2% /home/Tdump
none ___________ 95604 _________ 0 ______ 95604 _______ 0% /dev/shm

测试前提: 更换另外的软盘介质,首先卸载例子中的软盘分区
# umount /home/Tdump

更换软盘介质,然后格式化软盘
# mke2fs /dev/fd0

重新挂载 /home/Tdump 软盘分区
# mount /dev/fd0 /home/Tdump

restore程式还原整个文件系统(分区)
# cd /home/Tdump
[ note: 重要步骤! ]
# ls -al

步骤1. 首先还原 完整备份(然后才考虑还原 增量备份 )
# restore -r -f /backup/home_Tdump-full.dump
restore: ./lost+found: File exists

[ 注 ‘lost+found’目录由mke2fs程式创建。 以上‘File exists’信息提示备份档案中有相同名称的目录存在。该信息不影响实际操作。 ]
[ 注 ‘restore -r -u -f /backup/home_Tdump-full.dump’则没有以上的提示信息。 ]

# ls -al
[ 注 多了个restoresymtable文件,准备还原增量备份用的 ]

步骤2. 还原增量备份(属于更新备份)

核对增量备份档案
# cat /etc/dumpdates
# file /backup/home_Tdump-inc_Tues.dump
# restore -t -f /backup/home_Tdump-inc_Tues.dump

还原操作:
# restore -r -f /backup/home_Tdump-inc_Tues.dump
# rm restoresymtable
[ restore程式还原整个文件系统完毕! ]

-----
---

=== 尝试 restore程式恢复文件的应用操作

1, 操作比对模式,比对指定目录 (程式称filesys参数) 下的文件
# cd /tmp
# restore -C -f /backup/home_Tdump-inc_Tues.dump
[ 注 程式跟据备份档案设置默认值‘/home/Tdump’。‘restore -C -f /backup/home_Tdump-inc_Tues.dump -D /home/Tdump ’相同效果 ]

注: 使用 -C 比对模式,指定目录下的文件的‘the last access time (atime)’会被修改( stat 命令验证),属于 正常合理 系统操作。

有一个测试防止atime被修改的例子,前提是已经还原 完整备份(home_Tdump-full.dump):
# cd
# stat /home/Tdump/hello.txt
# mount -n -o noatime,remount /home/Tdump
# date
# restore -C -f /backup/home_Tdump-full.dump -D /home/Tdump
# stat /home/Tdump/hello.txt
# mount -n -o remount /home/Tdump

2, 抽取个别文件的例子
参考相关的备份资料,真正还原整个文件系统 个人应用不多。通常应用在恢复误删除文件,首先抽取指定文件,然后复制到相应的目录。
# cd /tmp
# mkdir /tmp/restore_tmp ; cd restore_tmp

显示 备份档案 内容:
# restore -t -f /backup/home_Tdump-full.dump
# restore -t hello.txt -f /backup/home_Tdump-full.dump
# restore -t mydir -f /backup/home_Tdump-full.dump

抽取文件
# restore -x -a hello.txt -f /backup/home_Tdump-full.dump
set owner/mode for '.'? [yn] n
[ 提示是否将当前目录的‘.’特殊目录文件设置成备份档案的‘所有者’和‘模式’。如 回答‘y’也没什么,当前目录都是临时目录,或者选择使用chown命令修改 ]

# ls -al
# stat hello.txt

只抽取目录,不包括目录下的文件
# restore -x -a -h mydir -f /backup/home_Tdump-full.dump
set owner/mode for '.'? [yn] n

[ 注: 执行restore程式的 -x模式, 没有-a选项则回答volume number是 1 ]

=== restore程式 -i 交互模式 的应用操作(恢复个别文件)
启用-i交互模式 则操作一个象Shell一样的交互式界面。就象操作 单独的文件系统 。
# cd /tmp/restore_tmp/
# restore -i -f /backup/home_Tdump-inc_Tues.dump
restore > ls
restore > help

抽取目录或文件的方法:首先用 add 指令把抽取的文件名提交到‘抽取列表’,若反悔则操作delete指令,而‘抽取列表’的内容则用‘*’作标记,然后extract指令执行 抽取动作。

例子:
提交,反悔的操作
restore > ls
.:
Tues-test.txt inc-test.txt

restore > add Tues-test.txt
restore > ls
.:
*Tues-test.txt inc-test.txt

restore > delete Tues-test.txt
restore > ls
.:
Tues-test.txt inc-test.txt

抽取文件
restore > add Tues-test.txt

restore > extract
You have not read any volumes yet.
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume # (none if no more volumes): 1
set owner/mode for '.'? [yn] n

restore > quit

查看恢复的文件
# stat Tues-test.txt

==============
==============
回复 支持 反对

使用道具 举报

发表于 2007-8-4 16:13:21 | 显示全部楼层

===3) 附件收集 dump/restore 文档 ===

1) dump-examples.tar.gz 文档来自 RH7.3系统 dump源码包。

2) dump-restore-mini-HOWTO.rar 文档来自 http://surf.ap.seikei.ac.jp/~nakano/dump-restore/dump-restore-mini-HOWTO.en.pdf
是一份专业文档,其中介绍 “Tower of Hanoi”备份策略,属于 更新备份和增量备份 混合操作。‘man dump’有提及。

个人笔记:
A。 “Tower of Hanoi”For example (27天)
-----------------------------------------------------------
0 -> 3 -> 2 -> 5 -> 4 -> 7 -> 6 -> 9 -> 8 ->
1(a) -> 3 -> 2 -> 5 -> 4 -> 7 -> 6 -> 9 -> 8 ->
1(b) -> 3 -> 2 -> 5 -> 4 -> 7 -> 6 -> 9 -> 8 -> Return to 0
-----------------------------------------------------------

dump程式0-9级别是为备份策略而设计。0是最低级别(完整备份),9是最高级别(增量备份)。
假设当前备份级别为 i,那么 dump 程式在执行时将寻找 最近一次 级别等于 i 或小于 i 的备份,将以前备份过后修改过或新创建的文件 备份下来,成为当前的增量备份。

例如,星期一执行了一次级别为2的备份,星期二执行了一次级别为4的备份,那么当星期三执行级别为3的备份时备份文件中将包括自星期一备份以来所有修改过或新创建的文件。如果星期三执行级别为4的备份,那么备份文件中将包括自星期二备份以来所有修改过或新创建的文件。

B。备份策略需要结合 恢复备份操作,才表现出效率。如“Tower of Hanoi”For example (27天)的恢复操作:
---------------------------------
0 3 2 5 4 7 6 9 8
---------------------------------
有些级别的备份不需要恢复,如 恢复level 2 ,则不需要恢复level 3 ,否则restore提示‘Incremental dump too high/low’等信息。

正确恢复顺序:
---------------------------------
0 2 4 6 8
--------------------------------

3) 介绍 dump 的优点,来自 http://dump.sourceforge.net/isdumpdeprecated.html

====

注:测试dump压缩信息/备份信息
例如:
# dump -z -0 -f /dev/null /home/Tdump
# dump -z4 -0 -f /dev/null /home/Tdump

====

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2007-8-8 18:25:00 | 显示全部楼层

===4) 添加 dump/restore 修理系统的实例,属于系统备份的范畴

制作LFS系统完成后,发现‘non-contiguous inodes (2.7%)’偏大,虽然不影响操作,比较操作了几年的RH7.3系统,现在才是‘non-contiguous inodes (0.4%)’。猜想该现象不属于是否选择EXT2,还是选择EXT3文件系统的问题,属于制作LFS系统过程的问题。

dump/restore 备份工具跟ext2/ext3文件系统嵌接得十分完整,尝试修理‘non-contiguous inodes’问题。
参考文档 dump-restore-mini-HOWTO

==================
RH7.3 制作 dump/restore软盘(utility disk)
# rpm -ql dump
# ls -lh /sbin/{dump,restore}
# mount /dev/fd0 /mnt/floppy
# cp /sbin/dump /mnt/floppy/dump.static
# cp /sbin/restore /mnt/floppy/restore.static
# umount /mnt/floppy
==================

==================
操作实例:
实例使用boot/root介质修理LFS系统(已经停止运作)。boot/root介质可选择LiveCD或rescue软盘,例子选择RH7.3安装光盘。

一。准备其他设备
软盘驱动器(放 dump/restore软盘),备份设备。例如 LFS系统是安装在VMware虚拟机,则‘Settings’中 Hardware页表框 add 'Hard Disk'(virtual disk) 和 'Floppy' 。

二。boot/root介质启动机器
RH7.3 安装光盘启动,选择 rescue模式 ........,‘Skip’进入Shell界面:
sh-2.05#
[ 启动 停止运作的LFS系统的机器,免去文档中卸载文件系统的步骤,如卸载proc文件系统 ]

三。文件系统检查器(e2fsck/fsck.ext2)检测LFS系统
# fdisk -l
# e2fsck /dev/sda1
# e2fsck -fv /dev/sda1
----------------------------------------------
e2fsck 1.27 (8-Mar-2002)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information

___50263 inodes used (10%)
____1349 non-contiguous inodes (2.7%)
________ # of inodes with ind/dind/tind blocks: 1943/12/0
__237507 blocks used (25%)
_______0 bad blocks
_______0 large files
___45708 regular files
____2963 directories
_______2 character device files
_______0 block device files
_______0 fifos
____2909 links
____1581 symbolic links (1581 fast symbolic links)
_______0 sockets
--------
___53163 files
----------------------------------------------
[ 文档中 ‘e2fsck -afv’确保文件系统协调一致。‘-a’选项意思是不询问任何问题,自动修复文件系统。]

四。格式化备份设备
本例使用 virtual disk(2GB),输入 fdisk -l 命令查得备份设备的文件名是/dev/sdb

# mke2fs /dev/sdb
mke2fs 1.27 (8-Mar-2002)
/dev/sdb is entire device, not just one partition!
Proceed anyway? (y,n) y
.................
.................

五。操作实例
# mkdir /mnt/dump_par
# mount /dev/sdb /mnt/dump_par

# mkdir /mnt/floppy
# mount /dev/fd0 /mnt/floppy

挂载 LFS系统分区
# mkdir /mnt/w
# mount /dev/sda1 /mnt/w
[ 依照文档,这里需要 -r 选项设置成只读。但该例子已经确保/dev/sda1分区没有数据写入。In other words!现在有没有数据写入是由自己掌握。]

(注意 dump程式需要/etc/fstab,而RH7.3光盘启动的操作环境没有设置 /etc/fstab文件 )
# echo "/dev/sda1 /mnt/w ext2 defaults 0 0" > /etc/fstab

估算备份档案Size
# /mnt/floppy/dump.static -0 -S /dev/sda1
[ 显示 880060416 的大概数值,‘df -h’显示已使用空间 884.0M ]

0级完整备份
# /mnt/floppy/dump.static -0 -f /mnt/dump_par/LFS-full.dump /mnt/w
# umount /mnt/w

即时还原LFS系统的例子:
# mke2fs /dev/sda1
# mount /dev/sda1 /mnt/w

# cd /mnt/w
# /mnt/floppy/restore.static -r -f /mnt/dump_par/LFS-full.dump
/mnt/floppy/restore.static: ./lost+found: File exists

# rm restoresymtable
# cd
# umount /mnt/{w,floppy,dump_par}

六。验证修理后的状况
# fsck.ext2 -fv /dev/sda1
----------------------------------------------
e2fsck 1.27 (8-Mar-2002)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
___50711 inodes used (10%)
______29 non-contiguous inodes (0.1%)
________ # of inodes with ind/dind/tind blocks: 1966/12/0
__241218 blocks used (25%)
_______0 bad blocks
_______0 large files
___46105 regular files
____3000 directories
_______2 character device files
_______0 block device files
_______0 fifos
____2909 links
____1595 symbolic links (1595 fast symbolic links)
_______0 sockets
--------
___53611 files
----------------------------------------------

==================

注: 修理成功(non-contiguous inodes (0.1%)),重新 启动LFS系统。

=========
‘# of inodes with [color="Sienna"]ind/dind/tind blocks: 1966/12/0’信息
注:
[color="sienna"]ind > indirect block (单次)
[color="sienna"]dind > double indirect block
[color="sienna"]tind > triple indirect block

notes: 有些资料对 直接块(direct blocks)类型用‘ndir’表示。
=========
回复 支持 反对

使用道具 举报

发表于 2007-8-10 19:27:55 | 显示全部楼层

阅读Linuxer电子杂志的验证笔记(dump,/etc/fstab,fs_freq)

linuxer12-2007-06.pdf ‘Linuxer专题’:
dump/restore: 一个操作系统自带的古老工具,不仅可以备份文件,不可以备份未加载的设备,虽然你可以简单的通过修改/etc/fstab文件中的一列来选择备份什么... ... 。
=======

RH7.3系统进行测试,前提必须安装dump备份工具
/etc/fstab 提供 文件系统 的静态信息。一些系统程序使用到文件中的各个域值(fs_spec,fs_file,fs_vfstype,fs_mntops,fs_freq,fs_passno)。

例如 fstab 内容:
LABEL=/ __________ / ____________ ext3 _____ defaults ____________ 1 1
/dev/fd0 _________ /home/Tdump __ ext2 _____ defaults ____________ 0 2
none _____________ /dev/pts _____ devpts ___ gid=5,mode=620 ______ 0 0
none _____________ /proc ________ proc _____ defaults ____________ 0 0
none _____________ /dev/shm _____ tmpfs ____ defaults ____________ 0 0
/dev/sda2 ________ swap _________ swap _____ defaults ____________ 0 0
#/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
/dev/cdrom _______ /mnt/cdrom ___ iso9660 __ noauto,owner,kudzu,ro 0 0

简单观察几个系统程序
mount系统程序 暂时设计只读取前四个域值。不使用 -n 选项时,把更新记录写入/etc/mtab文件。
# cat /etc/mtab | awk '$3 ~ /ext3/'
/dev/sda1 / ext3 rw 0 0

fsck系统程序检测系统时,需要读取第六域值(fs_passno)。当某一文件系统的fs_passno值为0,跳过检测。fs_passno值为1,依照顺序 首先执行检测,通常设置在 / 文件系统。当fs_passno值为2,次顺序执行检测工作。
[ 注 fstab文档中还考虑 文件系统 不在同一驱动器时的情况。 ]

观察dump备份程序
暂时观察dump程式,fstab文件第五域值(fs_freq)设置成 0 或 非0 不能直接控制dump备份操作,只给备份操作员提供参考信息。 参考信息方便非自动备份操作,查看备份周期,或者编写脚本 ... 。

dump -w/-W 选项读取参考信息
 -W  显示需要备份的文件系统及其最后一次备份的层级,时间与日期。信息来自 /etc/dumpdates 和 /etc/fstab 文件。该选项被设置,则其它选项被忽略。
 -w  与-W类似,但仅显示需要备份的文件系统。其信息来自/etc/fstab

摸索dump程式的fs_freq设置
1. 备份相关文件
# mkdir -p /root/bak
# cat /etc/fstab > /root/bak/test_dump.fstab
# cat /etc/dumpdates > /root/bak/test_dump.dumpdates

2. 伪造 fstab和dumpdates 测试文件,文件内容如下:
重新编写fstab测试文件
# vi /etc/fstab
----------------------------------------------
/dev/sda1 / ext3 defaults 1 1
/dev/sda2 /usr ext3 defaults 0 2
----------------------------------------------
[ sda1分区fs_freq设置成1,则要求以 1天( 86400秒 )备份周期进行备份操作。sda2分区不需要备份。]

模拟备份记录,首先明确现在的时间
# busybox date
Fri Aug 10 14:11:32 CST 2007

# vi /etc/dumpdates
----------------------------------------------
/dev/sda1 0 Sun Aug 05 12:00:00 2007
/dev/sda1 1 Thu Aug 09 12:00:00 2007
----------------------------------------------
[ 星期日中午做了完全备份,昨天依照1天备份周期做了‘level 1’增量备份 ]

3. 今天翻查 参考信息:
# dump -W
Last dump(s) done (Dump '>' file systems):
> /dev/sda1 ( /) Last dump: Level 1, Date Thu Aug 9 12:00:00 2007
/dev/sda2 ( /usr) Last dump: never

# dump -w
Dump these file systems:
/dev/sda1 ( /) Last dump: Level 1, Date Thu Aug 9 12:00:00 2007
[ 注:设置的1天备份周期已经过时,并提示最近一次的备份级别和时间,暗示需要备份操作。]

4. 即时测试备份周期
修改fs_freq值为2天的备份周期
# vi /etc/fstab
----------------------------------------------
/dev/sda1 / ext3 defaults 2 1
/dev/sda2 /usr ext3 defaults 0 2
----------------------------------------------

# dump -w
Dump these file systems:
# dump -W
Last dump(s) done (Dump '>' file systems):
/dev/sda1 ( /) Last dump: Level 1, Date Thu Aug 9 12:00:00 2007
/dev/sda2 ( /usr) Last dump: never
[ 注:还没到备份时间 (少了'>'标记) 。 ]

5. 继续测试
依照fs_freq值为2天的备份周期,把最近一次备份时间修改如下:
# vi /etc/dumpdates
----------------------------------------------
/dev/sda1 0 Sun Aug 05 12:00:00 2007
/dev/sda1 1 Wed Aug 08 12:00:00 2007
----------------------------------------------

# dump -w
Dump these file systems:
/dev/sda1 ( /) Last dump: Level 1, Date Wed Aug 8 12:00:00 2007
[ 注: 现在需要进行备份操作 ]

(重要)测试完毕!还原fstab和dumpdates文件内容
# cat /root/bak/test_dump.fstab > /etc/fstab
# cat /root/bak/test_dump.dumpdates > /etc/dumpdates

(总括来讲)暂时观察dump程式,fs_freq域值为 0 时,暗示不用备份,当fs_freq域值为 非0 时,则以1天备份周期为基本单位,作为参考信息。

[ 注:以上测试没太大实际意义,却非常安全。fs_freq称备份频率,例子中写备份周期方便理解。]

=============
回复 支持 反对

使用道具 举报

发表于 2007-8-22 18:23:05 | 显示全部楼层

== 《Ext2文件系统的内部布局》阅读辅助笔记 ==

参考网上资料: 《Ext2文件系统的内部布局》
附件中有摘录该文档

= 格式化软盘
# mke2fs /dev/fd0

= 软盘上ext2文件系统的元数据布局
ffset # of blocks description
偏移 _______ 块号 ______ 描述
-------- ----------- -----------
0 __________ 1 _______ boot record | 引导记录
# block group 0 – 块组 0
(1024 bytes) 1 ________ superblock | 超级块
2 __________ 1 ______ group descriptors | 块组描述符
3 __________ 1 ______ block bitmap | 块位图,块的位映像
4 __________ 1 ______ inode bitmap | inode位图,inode的位映像
5 _________ 23 _______ inode table | inode 表
28 ______ 1412 _______ data blocks | 数据块


使用hexdump程式显示数据分布状况
$ hexdump /dev/fd0
-----------------------------------------------
0000000 0000 0000 0000 0000 0000 0000 0000 0000 → 开头(512x2)属于引导记录
* 1024 bytes 开始属于‘group 0’内容
0000400 00b8 0000 05a0 0000 0048 0000 0577 0000 → 超级块
0000410 00ad 0000 0001 0000 0000 0000 0000 0000
0000420 2000 0000 2000 0000 00b8 0000 0000 0000
0000430 3d5a 4688 0000 001e ef53 0001 0001 0000
0000440 3d5a 4688 4e00 00ed 0000 0000 0001 0000
0000450 0000 0000 000b 0000 0080 0000 0000 0000
0000460 0002 0000 0001 0000 46b5 a849 91f5 de43
0000470 278c c907 162b 5ead 0000 0000 0000 0000
0000480 0000 0000 0000 0000 0000 0000 0000 0000
*
0000800 0003 0000 0004 0000 0005 0000 0577 00ad → 块组描述符
0000810 0002 0000 0000 0000 0000 0000 0000 0000
0000820 0000 0000 0000 0000 0000 0000 0000 0000
*
0000c00 ffff ffff 00ff 0000 0000 0000 0000 0000 → block bitmap
0000c10 0000 0000 0000 0000 0000 0000 0000 0000
*
0000cb0 0000 8000 ffff ffff ffff ffff ffff ffff
0000cc0 ffff ffff ffff ffff ffff ffff ffff ffff
*
0001000 07ff 0000 0000 0000 0000 0000 0000 0000 → inode bitmap
0001010 0000 0000 0000 ff00 ffff ffff ffff ffff
0001020 ffff ffff ffff ffff ffff ffff ffff ffff
*
0001400 0000 0000 0000 0000 3d5a 4688 3d5a 4688 → inode table
0001410 3d5a 4688 0000 0000 0000 0000 0000 0000
0001420 0000 0000 0000 0000 0000 0000 0000 0000
*
0001480 41ed 0000 0400 0000 3d5a 4688 3d5a 4688
0001490 3d5a 4688 0000 0000 0000 0003 0002 0000
00014a0 0000 0000 0000 0000 001c 0000 0000 0000
00014b0 0000 0000 0000 0000 0000 0000 0000 0000
*
0001900 41c0 0000 3000 0000 3d5a 4688 3d5a 4688
0001910 3d5a 4688 0000 0000 0000 0002 0018 0000
0001920 0000 0000 0000 0000 001d 0000 001e 0000
0001930 001f 0000 0020 0000 0021 0000 0022 0000
0001940 0023 0000 0024 0000 0025 0000 0026 0000
0001950 0027 0000 0028 0000 0000 0000 0000 0000
0001960 0000 0000 0000 0000 0000 0000 0000 0000
*
0007000 0002 0000 000c 0201 002e 0000 0002 0000 → data blocks
0007010 000c 0202 2e2e 0000 000b 0000 03e8 020a
0007020 6f6c 7473 662b 756f 646e 0000 0000 0000
0007030 0000 0000 0000 0000 0000 0000 0000 0000
*
0007400 000b 0000 000c 0201 002e 0000 0002 0000
0007410 03f4 0202 2e2e 0000 0000 0000 0000 0000
0007420 0000 0000 0000 0000 0000 0000 0000 0000
*
0007800 0000 0000 0400 0000 0000 0000 0000 0000
0007810 0000 0000 0000 0000 0000 0000 0000 0000
*
0007c00 0000 0000 0400 0000 0000 0000 0000 0000
0007c10 0000 0000 0000 0000 0000 0000 0000 0000
*
0008000 0000 0000 0400 0000 0000 0000 0000 0000
0008010 0000 0000 0000 0000 0000 0000 0000 0000
*
0008400 0000 0000 0400 0000 0000 0000 0000 0000
0008410 0000 0000 0000 0000 0000 0000 0000 0000
*
0008800 0000 0000 0400 0000 0000 0000 0000 0000
0008810 0000 0000 0000 0000 0000 0000 0000 0000
*
0008c00 0000 0000 0400 0000 0000 0000 0000 0000
0008c10 0000 0000 0000 0000 0000 0000 0000 0000
*
0009000 0000 0000 0400 0000 0000 0000 0000 0000
0009010 0000 0000 0000 0000 0000 0000 0000 0000
*
0009400 0000 0000 0400 0000 0000 0000 0000 0000
0009410 0000 0000 0000 0000 0000 0000 0000 0000
*
0009800 0000 0000 0400 0000 0000 0000 0000 0000
0009810 0000 0000 0000 0000 0000 0000 0000 0000
*
0009c00 0000 0000 0400 0000 0000 0000 0000 0000
0009c10 0000 0000 0000 0000 0000 0000 0000 0000
*
000a000 0000 0000 0400 0000 0000 0000 0000 0000
000a010 0000 0000 0000 0000 0000 0000 0000 0000
*
0168000
-----------------------------------------------


= 阅读‘超级块’例子:
配合《Ext2文件系统的内部布局》文档阅读块内容,一般可以直接观察显示信息。例子:
$ hexdump /dev/fd0 -s 0x400 -n 1024

或者选择以下例子:
文档中的超级块结构
offset(偏移) size(大小) description(描述)
------------ ----------- ----------------
0 __________ 4 ____ s_inodes_count
4 __________ 4 ____ s_blocks_count
8 __________ 4 ____ s_r_blocks_count
... ... ...


$ hexdump /dev/fd0 -s 1024 -n 4
0000400 00b8 0000
0000404 [ s_inodes_count 32bit的值表示所有inode的总数是(b8)16=(184)10 ]

$ hexdump /dev/fd0 -s 1028 -n 4
0000404 05a0 0000
0000408 [ s_blocks_count 32bit的值表示块的总数是(05a0)16=(1440)10 ]

$ hexdump /dev/fd0 -s 1032 -n 4
0000408 0048 0000
000040c [ s_r_blocks_count 32bit的值表示为超级用户保留的块的总数是(48)16=(72)10 ]

例如‘超级块’(s_first_data_block值是1),offset(56),size(2)
$ hexdump /dev/fd0 -s 1080 -n 2
0000438 ef53
000043a [ s_magic 16bit的值用于识别文件系统为Ext2。此值通常固定为0xEF53。 ]

例如 s_wtime 和 s_lastcheck
$ hexdump /dev/fd0 -s 1072 -n 4
$ hexdump /dev/fd0 -s 1088 -n 4
0000440 3d5a 4688
0000444 [ 时间值 (4688 3d5a)16=(1183333722)10 , 系统翻译出的时间是‘Mon Jul 2 07:48:42 2007’]

比较并验证文件系统信息:
dumpe2fs /dev/fd0 或 dumpe2fs -h /dev/fd0,或 tune2fs -l /dev/fd0

(部分笔记)
[color="Indigo"]Filesystem fixed parameters :

[color="Sienna"]s_magic | 识别Ext2文件系统,此值固定为0xEF53。offset(56) size(2)

[color="sienna"]s_inodes_count | 可用inodes总数
[color="sienna"]s_blocks_count | 可用blocks总数
[color="sienna"]s_first_data_block | 块大小为1KB的文件系统里标记值总是1,其他情况时为0。猜想是为兼容‘软盘’
[color="sienna"]s_blocks_per_group | 每块组里块的总数
[color="sienna"]s_inodes_per_group | 每块组inodes的总数
[color="sienna"]s_creator_os | 创建文件系统的操作系统的识别代码。例如 值0表示Linux操作系统

[color="sienna"]s_rev_level | 修订级别值。也是特性兼容域,帮助安装(挂载)代码确定哪些新的特征可以安全地使用在这个文件系统上。
值0 表示 EXT2_GOOD_OLD_REV,original format( 原始的格式 )
值1 表示 EXT2_DYNAMIC_REV,V2 format with dynamic inode sizes( 使用动态inode大小的V2格式 )

[color="sienna"]s_log_block_size | 块大小(block size)用1024算术左移以 此值 为位数而得出。
例 s_log_block_size值0 表示 块大小是 1k (1024bytes),二进制为 10000000000
值1 则左移1位,块大小是 (100000000000) = 2048bytes
值2 则左移2位,块大小是 (1000000000000) = 4096bytes ,这是硬盘常用。

[color="sienna"]fragments 如果没有被支持,则块跟fragments是值相等。因此 s_log_frag_size,s_frags_per_group 与 s_log_block_size,s_blocks_per_group 值相等。

[color="indigo"]Filesystem current state :
[color="Sienna"]s_free_blocks_count | 所有块组里的所有未用的块的总数
[color="sienna"]s_free_inodes_count | 所有块组里的所有未用的inode的总数
[color="sienna"]s_mtime | 文件系统最近被挂载(mount)的时间
[color="sienna"]s_wtime | 文件系统最近被访问(或内容被修改)的时间

[color="indigo"]Filesystem additional parameters :
  其中包括的一些可调参数(tunable parameters),能使用tune2fs命令调整。

[color="sienna"]s_r_blocks_count,s_def_resuid,s_def_resgid 默认标记值是为root设置保留块。就算 mke2fs创建文件系统时不设置 保留块,块的使用率也没有可能达到100%。
[ 注 tune2fs命令 -m 或 -r 调整 ]

[color="sienna"]s_state,s_errors 标记值通常与处理Ext2文件系统出错的问题相关。
[color="sienna"] s_state标记值: 用户操作文件系统,正常挂载状态时,标记值是0。用户正常卸载(unmounted)文件系统后,该值是1 。

  当RH7.3系统意外中断后,重新开机引导系统,内核把s_state值加入到‘鉴定信息’,发送到第三方软件(如fsck) 决定是否扫描或修复Ext2文件系统。

  但内核有时为达到某种意途,指定s_state标记值,这使s_state值理解文件系统的挂载状态变得混乱!
实例,RH7.3系统启动后,/文件系统s_state值都是 1 (ef53 0001)。

以下两组参数,强迫fsck程序执行
1) [color="sienna"]s_mnt_count 和 s_max_mnt_count | 基于 mount次数进行检查
2) [color="sienna"]s_lastcheck 和 s_checkinterval | 基于时间,定期进行检查

==
==

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表