关于硬盘主引导扇区的结构及功能(转帖2篇)

用电脑这么多年了,一直对硬盘的主引导扇区和分区表等概念很模糊,这两天自己的硬盘分区表出现问题,特地在网上查了一下相关资料,觉得下面两篇帖子不错,可以作为对这个问题的基本了解之用。

我原来一直以为重新装了一个操作系统后就会把主引导分区和分区表覆盖了,导致同一硬盘的其它操作系统不能启动。现在看来原因不是这样的:像我在安装windows和linux双系统后(grub引导放在主引导扇区),重新用镜像覆盖了windows,而grub引导程序照常引导linux系统和windows系统。

所以,主引导记录是硬盘保留的一块特殊区域,重装系统,格式化分区等操作对主引导记录没有影响,格式化分区后只对其中的分区表中的类型标志有改动。

下面是两篇转帖:

1、关于硬盘主引导扇区的结构及功能全面释疑(转自:http://tech.sina.com.cn/c/2003-02-27/17872.html

关于硬盘主引导扇区的结构及功能全面释疑

http://www.sina.com.cn 2003/02/27 09:38 新浪科技论坛

  文/硬盘医生

  很多朋友对于硬盘的主引导扇区里的MBR(Main Boot Record)和DPT(Disk Partition Table)的区别有些分不太清。于是我想把它写个简短的介绍,希望能对这些朋友有点帮助。

  引导扇区在每个分区里都存在,但是我们常说的*主引导扇区*是硬盘的第一物理扇区。它由两个部分组成:即主引导记录MBR和硬盘分区表DPT。在总共512字节的主引导分区里其中MBR占446个字节(偏移0--偏移1BDH),DPT占64个字节(偏移1BEH--偏移1FDH),最后两个字节“55,AA”(偏移1FEH偏移1FFH)是分区的结束标志。大致的结构如下图:

图1

  图一:主引导扇区结构图

  主引导记录中包含了硬盘的一系列参数和一段引导程序。引导程序主要是用来在系统硬件自检完后引导具有激活标志的分区上的操作系统。它执行到最后的是一条JMP指令跳到操作系统的引导程序去。这里往往是引导型病毒的注入点,也是各种多系统引导程序的注入点。但是由于引导程序本身完成的功能比较简单,所以我们可以完全地判断该引导程序的合法性(看JMP指令的合法性),因而也易于修复。象命令fdisk/mbr可以修复MBR和 KV300这类软件可以查杀任意类型的引导型病毒,就是这个原因。

  往下来是硬盘的分区表,由4个16字节的分区信息表组成。每个信息表的结构如下:

  偏移 长度 所表达的意义

  0 字节 分区状态: 如0-->非活动分区

  80--> 活动分区

  1 字节 该分区起始头(HEAD)

  2 字 该分区起始扇区和起始柱面

  4 字节 该分区类型:如82--> Linux Native分区

  83--> Linux Swap 分区

  5 字节 该分区终止头(HEAD)

  6 字 该分区终止扇区和终止柱面

  8 双字 该分区起始绝对分区

  C 双字 该分区扇区数

  最后的两个标志“55 AA”是分区表的结束标志,如果这两个标志被修改(有些病毒就会修改这两个标志),则系统引导时将报告找不到有效的分区表。

  由上面的所列出的结构可以大致地了解主引导扇区的结构和用途。下面,有一些关于主引导扇区的常见问题:

  Q1、fdisk/mbr 会不会把硬盘的分区表破坏呀?

  A: 从上面的土一我们可以看到fdisk/mbr是不会影响到DPT的。fdisk/

  mbr只是把主引导分区里的MBR部分重新写过,而不会对DPT有任何破坏。

  Q2、在Linux里有一种方法可以恢复MBR是用如下的命令:

  dd if=/boot/boot.NNNN of=/dev/hda bs=446 count=1

  其中bs(buffer size)是指重写的字节数。为什么不是512

  呢?主引导扇区是一个扇区(512字节呀)?

  A: 答案是因为我们用上面的命令是为了修复可能被病毒修改了的主引导记

  录MBR,或者想把LILO卸载掉,而不是恢复整个主引导扇区。所以我们

  只把主引导扇区的备份文件boot.NNNN的前446个字节重写入主引导扇区。

  boot.NNNN是我们在安装Linux之前整个主引导分区的备份。如果我们把

  512个字节全部写入主引导扇区就可能会把安装了Linux后改变了的硬盘

  DPT表也破坏掉。那就坏事了。 🙂

  linuxrat补充一些:=)...

  MBR-> Main/Master Boot Record, 有些书上是写成Master的.我认为可以分成三个部分吧, MBR+DPT+MagicNumber(446+64+2=512)这也就是为什么进行MBR备份的时候要指定bs=512 或者 bs=1k, count=1的原因.然后恢复时经常看到HOWTO里面是bs=446 count=1. 这个446就是指令部分的恢复。

慎用硬盘第三方分区工具和硬盘分区表修复经验

我因为常安装操作系统,经常用硬盘分区工具:pqmagic对硬盘折腾来折腾去。但是,这次在对硬盘分区的一次操作中,我把在网上收集了很久的资料分区转换成linux的ext3格式,转换之前把这些文件先转到其它分区,把原分区格式成ext3后再把文件转过去,就这样,几个G的资料被我转来转去。最后,在转换一个分区的时候,pqmagic报告文件格式不支持,出现错误。

于是,重启动电脑后,系统不能启动了,在DOS下进入pqmagic,报告什么#108错误之类的东西,原来的分区统统不见了。只剩下一个#108坏的硬盘的提示。

系统没了没事,可我数年积攒的资料怎么办呀,我急了。

用了linux的恢复盘也不行。

我猜想肯定是硬盘分区表有问题了。最后,重装了系统,上网下载了“diskgen(即diskman)”和“易我分区表修复工具”。

用diskgen自动和手动查了一下硬盘的分区,报告的完全是错误的格式和错误的容量,diskgen是一款优秀的分区表修复工具,估计是我一直以来对硬盘毫无顾忌的分区操作的恶果,把分区表搞得太乱了,diskgen也无能为力了。

后来用“易我分区表修复工具”找出了9个分区中的7个,其中就包括我转资料的2个ext3分区。虽然没有全部找出来,不过我已经知足了。

然后就是格式化,再装系统。最后终于达成了我的想法,把原来的所有资料都转入linux分区。

我的教训就是:最好不要用第三方的分区工具,而用系统自带的;必须把硬盘的分区表用好点的软盘或其它介质备份;备份工具可以选择上面的“diskgen”或“易我分区表修复工具”等;

我的经验就是:在碰到硬盘分区问题时不要对硬盘进行你不知后果的盲目操作;在碰到硬盘分区问题用其它方法不能解决的情况下,可以试一下“易我分区表修复工具”。我并不是说,“易我分区表修复工具”是最好的,也许有时,它不能解决的分区表问题其它工具却能解决,我只是说,它可以一试;在使用“易我分区表修复工具”时,一定要根据它的提示制作一个软盘紧急修复盘,这样出现问题后可以在纯DOS下进行进一步的操作;再对硬盘分区表的每一次操作前都把原来的分区表作一下备份。

“备份”是保证系统安全的最佳途径。

几个有趣的shell和一个执行结果有问题的shell

这两天在看那本讲bash编程的电子书

在这本电子书中有几个有趣的shell脚本。

1、(abs-guide-3.7/HTML/sha-bang.html)

在一个文本文件的前面加上:#!/bin/more 就可以让文本文件自己显示自己; 在一个文件前面加上:#!/bin/rm 就可以自己删除自己;

2、找出存储设备的某类文件并把它们打包:

(abs-guide-3.7/HTML/special-chars.html)

  find . -mtime -1 -type f -print0 | xargs -0 tar rvf "bak.tar"

3、一个执行结果不像书上说的那样的shell:

(abs-guide-3.7/HTML/special-chars.html)


Ctl-H

"Rubout" (destructive backspace). Erases characters the cursor backs over while backspacing.

   1 #!/bin/bash

   2 # Embedding Ctl-H in a string.

   3

   4 a="^H^H"                  # Two Ctl-H's (backspaces).

   5 echo "abcdef"             # abcdef

   6 echo -n "abcdef$a "       # abcd f

   7 #  Space at end  ^              ^ Backspaces twice.

   8 echo -n "abcdef$a"        # abcdef

   9 #  No space at end                Doesn't backspace (why?).

  10                           # Results may not be quite as expected.

  11 echo; echo

一不小心,又中流氓软件的招了

今天早上,我通过搜索引擎到一个不知名的站点下载了一个驱动程序DE220.zip(多半是这个原因),因为调试局域网,关了瑞星的防火墙.

习惯性的用瑞星扫描了这个压缩文件,没有问题。驱动程序解压后,然后又是一个de220.exe,看来是个自解压文件,双击执行。windows2000的控制台没有任何提示,运行近一分钟后,控制台退出。在文件夹中出现了许多驱动安装文件。

重启计算机后,问题出现了:

首先是瑞星的防火墙和杀毒软件不能启动了;

然后是几个网站的自动连接请求:这些网站大概是:

install.dmcast.com

con1.dmcast.com

yahoo.com.cn

zhongsou.com

现在,只要一拨号adsl上网,adsl的数据传输指示灯就不停的狂闪,显然是大量的数据传输在不受控制的进行着。赶紧断开adsl,去手动开瑞星的防火墙和杀毒软件,报告防火墙出错,不能启动,启动杀毒软件也没有反应。

现在,就这样让这种流氓软件夺走了机器的控制权,真的是心有不甘呀。

以后,吸取教训:

到大站下载软件;

自解压的软件慎重执行;

哎,现在的windows的世界真的是把人整得提心吊胆了。主要是经济利益的驱动。还有,谁让windows统治了大家的计算机?

大家都说linux安全,我想,一个很重要的原因是:开发在linux上面的流氓软件不会有多少人中招,因为,没有多少普通的老百姓使用它。那些流氓软件和病毒们没有多少攻击对象。

要是linux真是成了在普通老百姓中使用的主流操作系统,linux使用起来真的还会这样省心吗?

也许,到时,在windows上上演的一出出游戏又照样在linux上出现了?

我也不知道linux的到底是不是天生的比windows安全还是环境使然。不过,至少现在linux还是比较安全和方便的(尤其是那个shell,才接触一丁点,就感到它是妙用无穷了:)),所以,把我的个人使用平台移到linux下面的计划不变。还有,linux还是免费的:)

从DOS引导linux系统

据说,linux本身的多重引导程序lilo和grub非常优秀了。但是,总还有优秀的事物无法解决的问题。巧得很,我就碰到两台机子不得不从DOS引导。

一台是单位的p4 1.8G, 40G, 256M, Windows XP的机器,挂了一块10G的redhat linux9.0;不知原来装Windows XP时用什么分的区,grub程序始终不能引导Windows XP;用pqmagic报告是分区表有问题,但是使用起来一切正常。

另一台是老掉牙床的486DX100, 28M,212M 装的win97,用来给小孩练打字;1.6G,装的是没有X图形界面的redhat linux9.0,在没有机器用的时候可以学习一下linux的脚本编程。但是老机只能从C或A启动,而且,那块1.6G的硬盘不知什么问题,不能设为主盘,只能是从盘或者single模式;老主板的另一个硬盘接口又不能用(一个叫LBA,一个叫AT,这个叫AT的不能用),最后只能从Windows 97下来引导linux了。

从DOS下引导linux需要一个叫作loadlin.exe的文件,你可以在下面下载到;

附件:loadlin.zip,9898 bytes

把loadlin.exe和你的linux系统需要启动的核心,比如:vmlinuz,和那个影像文件叫:initrd.img(如果有的话) 放在一个文件夹中,比如C:\linux文件夹中。

然后把一个DOS的批处理文件linux.bat放到比如:C盘中。

这样,当你进入纯DOS状态时(不是图形界面下的DOS),输入C:\linux.bat,就可以启动系统了。

我的linux.bat的内容:


c:\linux\loadlin  c:\linux\vmlinuz initrd=c:\linux\initrd.img root=/dev/hda4 vga=792 rw

上面这个办法是我从slackware发行包中的那个zipslack文件夹中学到的。zipslack是一个简化的linux,可以拷在一个windows分区中在dos状态下引导。这是关于zipslack的信息:http://www.slackware.org/zipslack/


ZipSlack

ZipSlack is a special edition of Slackware Linux that can be installed onto any FAT (or FAT32) filesystem with about 100 MB of free space. It uses the UMSDOS filesystem and contains most of the programs you will need. This means that you do not need to repartition your hard disk if you already have DOS or Windows installed. ZipSlack installs into a directory on your DOS filesystem. It can also be installed to and booted from a Zip disk.

This distribution is ideal for people who don't have a lot of hard disk space, do not have a fast Internet connection to download the entire distribution, or who want a Linux distribution they can carry around on a Zip disk.

Linux服务器网卡驱动安装及故障(转帖)

转自:http://www.ccw.com.cn/server/yyjq/htm2005/20050817_15OF4_3.htm

Linux服务器网卡驱动安装及故障排除

 

 

2005-08-17 16:04:42.107

 

  计世网特约撰稿 曹江华 

 

3.为新网卡设定IP地址

在Linux 网络设备在配置时被赋予别名,该别名由一个描述性的缩略词和一个编号组成。某种类型的第一个设备的编号为 0,其他设备依次被编号为 1、2、3,等。但是网卡并

不是最为裸设备出现在/dev目录下,而是存在内存中。eth0, eth1是以太网卡接口。它们用于大多数的以太网卡,包括许多并行端口以太网卡。本文主要讨论这类网卡。 为Linux以太网卡设定IP地址的方式非常灵活,你可以选择适合你工作情况的方法:

(1)使用ip或ifconfig命令

ifconfig命令是最重要的Linux网络命令,最主要的用途是设定、修改网卡的IP地址,修改网卡ip地址:

#ifconfig eth0 192.168.0.2 netmask 255.255.255.0

默认情况下, ifconfig 显示活动的网络设备。给这个命令添加一个 -a 开关就能看到所有设备。但是ifconfig命令设置网络设备的ip地址系统重新启动后设置会自动失效。所以它主要用于网卡状态调试。假设您要建立一个临时的网络配置以供测试。您可以使用发行版本中的工具来编辑配置,但是需要注意在完成测试之后,将所有设置恢复回去。通过使用 ifconfig ,我们无需影响已保存的设置,就能够快速地配置网卡。

Ip命令是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具。例如:ifconfig、route等。现在,绝大多数 Linux 发行版和绝大多数 UNIX都使用古老的arp, ifconfig和route命令。虽然这些工具能够工作,但它们在Linux2.2和更高版本的内核上显得有一些落伍。使用iproute2前你应该确认已经安装了这个工具。这个包的名字在RedHat Linux 9.0叫作“iproute2”,也可以在:ftp://ftp.inr.ac.ru/ip-routing/ 下载源代码安装。

如果希望在以太网接口eth0上增加一个地址10.0.0.1,掩码长度为24位,标准广播地址,标签为eth0:Alias:

#ip addr add 10.0.0.1/24 brd + dev eth0 label eth0:Alias

(2)使用 netconfig命令

netconfig命令可以设置网络设备的ip地址,netconfig命令可以永久保存设置。

使用方法是:“netconfig ethX”。使用命令“netconfig eth0”后会在命令行下弹出一个对话框,这时即可进行设定见图2,

图2 netconfig配置界面

设定结束后用“tab”键选择“OK”即可保存设置并且退出。然后使用命令:“service network restart “激活即可生效。

(3)使用neat命令

使用neat命令需要配置好X window系统,在命令行下运行“neat”命令后添加IP地址和其他相关参数后保存设置,从新启动网络和网络服务或计算机,见图-3。

图-3 图形界面添加IP地址

另外neat命令还有一个同价命令:“redhat-config-network”,二者完全相同。Neat和redhat-config-config命令可以永久保存设置。

(4)修改TCP/IP网络配置文件

除非另行指定,Red Hat Linux 系统中大多数配置文件都在 /etc 目录中。网卡相关的TCP/IP网络配置文件是:/etc/sysconfig/network-scripts/ifcfg-ethx。其中x从0开始,第一个以太网配置文件即:/etc/sysconfig/network-scripts/ifcfg-eth0。使用vi编辑器修改这个文件,也可以修改网卡IP地址。

#vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0        #设定网卡的名称,要跟文件名称对应 #

ONBOOT=yes        #是否在开机的的时候启动网卡#

BOOTPROTO=static      #启动的时候的 IP 取得的协议,这里是固定的,

               如果是动态主机的话,要改成 dhcp 才行#

IPADDR=192.168.1.2     #IP 地址#

NETMASK=255.255.255.0   #子网掩吗#

NETWORK=192.168.1.0    #该网段的第一个 IP#

BROADCAST=192.168.1.255  #最后一个同网段的广播地址#

GATEWAY=192.168.1.2    #网关地址#

#GATEWAYDEV=eth0      

存盘后使用命令:“service network restart “激活即可生效。这个方法同样可以永久保存设置。

(5)为网卡添加IPV6地址

和Windows系统相比Linux对Ipv6的支持更好,最早的支持Ipv6的Linux内核是 2.2.xxx。一般Linux基于2.4内核的Linux发行版本都可以直接使用Ipv6,使用前要看系统IPv6模块是否被加载,如果没有的话可以使用命令手工加载,这需要超级用户的权限。然后使用命令检测,如果显示IPv6地址(inet6 addr:fe80::200:e8ff:fea0:2586/64)证明IPv6已经加载。

# modprobe IPv6;#ifconfig -a

如果希望Linux系统启动时自动加载Ipv6模块,可以在配置文件:/etc/modules.conf中加入一行:

alias net−pf−10 ipv6 # automatically load IPv6 module on demand

把Redhat linux9.0运行在486DX100上了

没有装X图形界面的原来装在K6-2 450,mvp3主板上的Redhat linux9.0的1.6G的硬盘,不经修改就挂到一台老掉牙的486DX100,24M内存的机器上了。可以运行字符界面下面的所有程序。包括:vi,w3m,emacs等等。

今天,就在这台机器上看了那本讲bash编程的电子书(老婆学会了上网聊天,这几天的兴趣正浓,把那台好点的机器给占了),现学现用,把zhcon命令加入到/etc/profile文件的结束处,用户登录后就自动进入zhcon中文的控制台环境了。这就是bash编程教程的第一个例程的功效,bash的最简单的作用就是把一组命令组合在一起来完成一个任务,以后执行这个任务就执行这个bash脚本就是了,不必单独的输入一个一个的命令。

另外,由于这台机器的内存太少了,参照前段时间收藏的一篇讲系统服务的文章把/etc/rc3.d里面不必要的服务的前面的S通通换成K,这样,前面是K的服务就不会启动了。

我的启动级别是3,rc3.d里面的内容如下:


K05kudzu      K13portmap  K24pcmcia   K50snmpd      K90crond    S12syslog

K05saslauthd  K14nfslock  K25netfs    K50snmptrapd  K90xfs      S17keytable

K08iptables   K20nfs      K26apmd     K55sshd       K95anacron  S56rawdevices

K09isdn       K20random   K28autofs   K56xinetd     K95atd      S85gpm

K10network    K24irda     K35winbind  K80sendmail   K97rhnsd    S99local

vi/vim 键盘图 (转帖)

转自:http://blog.linuxsky.net/3000/viewspace_1278_aid_279.html



图片故事

原贴地址: http://www.linuxsir.org/bbs/showthread.php?t=257834

献给vi的初学者!

英文源文件来自: http://www.viemu.com/

请注意:

1、不能代替通过文档学习,因为图片无法涵盖vi的所有功能

2、无法用几个中文字表达#、*、t等功能键的用法,只能保留英文

3、由于制作工具原因,中文未选用合适的粗体,哪位有时间帮忙做一下

简体中文pdf下载

简体中文SVG文件下载 英文源图

对岸的jserv在此基础上又制作了繁体版,见这儿http://blog.linux.org.tw/jserv/

如何扫描检查Linux磁盘(转帖)

转自:http://kb.discuz.net/index.php?title=%E5%A6%82%E4%BD%95%E6%89%AB%E6%8F%8F%E6%A3%80%E6%9F%A5Linux%E7%A3%81%E7%9B%98

如何扫描检查Linux磁盘

Wikipedia,自由的百科全书

Linux提供了一个磁盘检查工具,当磁盘出现错误的时候可以使用fsck对磁盘进行扫描和修复。以下让我们看看如何使用

fsck来检查磁盘分区。

fsck使用很简单,首先让我们看看fsck常用的参数:

-t : 给出文件系统格式(例如:vfat,ext3等),如果文件系统格式在 /etc/fstab 中已经定义或 Kernel 本身已经支持,则无需使用参数。

-A : 对/etc/fstab 中所有挂载的分区进行检查。

-C : 显示完整的检查进度。

-d : 显示 e2fsck 的 Debug 结果。

-p : 如果使用 -A 参数,则同时有多个 fsck 扫描并行工作。

-R : 如果使用 -A 参数,则省略 / 分区不检查。

-V : 详细显示模式。

-a : 如果扫描发现错误则自动尝试修复。

-r : 如果扫描发现错误则提示用户,由用户决定是否修复(交互模式)。

举例:

需要对所有以挂载的分区进行扫描,并且让系统自动修复所有错误。

 # fsck -A -C -d -V -a

注意!

1. 如果磁盘含有NTFS分区,则不要对其进行扫描,否则有可能导致NTFS分区彻底损坏!

2. 建议在进行扫描前关闭所有服务!不要有磁盘写操作,否则可能导致磁盘分区检查失败甚至分区损坏!

总之,对于Linux系统经验相对较少的用户还是不推荐使用fsck进行检查的,fsck有一定的风险。如果磁盘分区出现异常最好还是求助于有经验的技术人员。