关于 FDISK 的问题 请 高手回答
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于 FDISK 的问题 请 高手回答相关的知识,希望对你有一定的参考价值。
进入 DOS状态 运行 FDISK后如下
1: Create DOS Partition or logical DOS Drive
2: Set active partition
3: Delete partition or logical DOS drive
4: Display partition information
分别是什么意思??
尽量具体一点 谢谢~~~
fdisk - Partition table manipulator for Linux ,译成中文的意思是磁盘分区表操作工具;本人译的不太好,也没有看中文文档;其实就是分区工具;
fdsik 能划分磁盘成为若干个区,同时也能为每个分区指定分区的文件系统,比如linux 、fat32、 linux 、linux swap 、fat16 以及其实类Unix类操作系统的文件系统等;当然我们用fdisk 对磁盘操作分区时,并不是一个终点,我们还要对分区进行格式化所需要的文件系统;这样一个分区才能使用;这和DOS中的fdisk 是类似的;
二、合理规划您的硬盘分区;
在操作分区之前,我们要明白硬盘分区一点理论,比如硬盘容量和分区大小的计算;对一个硬盘如何规划分区等,请参考如下文档,谢谢;
《合理规划您的硬盘分区》
三、fdisk -l 查看硬盘及分区信息;
通过《合理规划您的硬盘分区》 ,我们知道主分区(包括扩展分区)的总个数不能超过四个;也不能把扩展分区包围在主分区之间;根据这个原则,我们划分硬盘分区就比较容易的多;也能为以后减少不必要的麻烦;
1、通过fdisk -l 查看机器所挂硬盘个数及分区情况;
[root@localhost beinan]# fdisk -l
Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 9729 55617030 5 Extended
/dev/hda5 2806 3825 8193118+ 83 Linux
/dev/hda6 3826 5100 10241406 83 Linux
/dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris
/dev/hda8 5199 6657 11719386 83 Linux
/dev/hda9 6658 7751 8787523+ 83 Linux
/dev/hda10 7752 9729 15888253+ 83 Linux
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
/dev/sda6 51 76 200781 83 Linux
通过上面的信息,我们知道此机器中挂载两个硬盘(或移动硬盘),其中一个是hda 另一个是sda ;如果我们想查看单个硬盘情况,可以通过 fdisk -l /dev/hda1 或者fdisk -l /dev/sda1 来操作;以fdisk -l 输出的硬盘标识为准;
其中 hda有三个主分区(包括扩展分区),分别是主分区 hda1 hda2 和hda3(扩展分区) ;逻辑分区是 hda5到hda10;
其中 sda 有两个主分区(包括扩展分区),分别是 hda1 和hda2 (扩展分区);逻辑分区是 sda5 hda6 ;
硬盘总容量=主分区(包括扩展分区)总容量
扩展分区容量=逻辑分区总容量
通过上面的例子,我们可以得知 hda=hda1+hda2+hda3,其中hda3=hda5+hda6+hda7+hda8+hda9+hda10 ... ...
2、关于fdisk -l 一些数值的说明;
Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
这个硬盘是80G的,有255个磁面;63个扇区;9729个磁柱;每个 cylinder(磁柱)的容量是 8225280 bytes=8225.280 K(约为)=8.225280M(约为);
分区序列 引导 开始 终止 容量 分区类型ID 分区类型
Device Boot Start End Blocks Id System
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 9729 55617030 5 Extended
/dev/hda5 2806 3825 8193118+ 83 Linux
/dev/hda6 3826 5100 10241406 83 Linux
/dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris
/dev/hda8 5199 6657 11719386 83 Linux
/dev/hda9 6658 7751 8787523+ 83 Linux
/dev/hda10 7752 9729 15888253+ 83 Linux
说明:
硬盘分区的表示:在Linux 是通过hd*x 或 sd*x 表示的,其中 * 表示的是a、b、c ... ... x表示的数字 1、2、3 ... ... hd大多是IDE硬盘;sd大多是SCSI或移动存储;
引导(Boot):表示引导分区,在上面的例子中 hda1 是引导分区;
Start (开始):表示的一个分区从X cylinder(磁柱)开始;
End (结束):表示一个分区到 Y cylinder(磁柱)结束;
id和System 表示的是一个意思,id看起来不太直观,我们要在fdisk 一个分区时,通过指定id来确认分区类型;比如 7表示的就NTFS 分区;这个在fdisk 中要通过t功能来指定。下面的部份会提到;
Blocks(容量):这是我翻译的,其实不准确,表示的意思的确是容量的意思,其单位是K;一个分区容量的值是由下面的公式而来的;
Blocks = (相应分区End数值 - 相应分区Start数值)x 单位cylinder(磁柱)的容量
所以我们算一下 hda1的 Blocks 的大小 :
hda1 Blocks=(765-1)x8225.280=6284113.92 K = 6284.113.92M
注:换算单位以硬盘厂家提供的10进位算起,如果以操作系统二进制来算,这个分区容量应该更少一些,得出的这个值和我们通过 fdisk -l 看到的 /dev/hda1的值是大体相当的,因为换算方法不一样,所以也不可能尽可能的精确;再加上分区时的一点损失之类,有时或大或小是存在的;
我们查看分区大小或者文件的时候,还是用十进制来计算比较直观;推算办法是 byte 向前推小数点三位就是K ,K单位的值向前推小数点三位就是M,M向前推小数点三位就是G... ... 一般也差不了多少;这么算就行;
3、估算一个存储设备是否被完全划分;
我们估算一个硬盘是否完全被划分,我们只要看 fdisk -l 输出的内容中的 cylinders(柱体) 上一个分区的End 和 下一个分区的Start是不是一个连续的数字,另外要看一下每个硬盘设备的fdisk -l 的开头部份,看一下他的 cylinders(柱体)的值;
比如hda设备,我们看到的是 9729 cylinders ;我们通过 hda的分区表可以看到上一个分区的End的值+1 就是下一个分区的Start 的值;比如 hda2的Start的值是 hda1 的End 的值+1,这证明 hda1 和hda2 中间没有空白分区,是连续的,以此类推;在 hda10,我们看到 End 的值是9729 ,而在fdisk -l头部信息中也有9729 cylinders,证明这个硬盘已经完全划分;
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
/dev/sda6 51 76 200781 83 Linux
我们再看看 sda 移动储是不是被完全划分了;sda有 125个cylinders (柱体),有一个主分区和一个扩展分区构成;在扩展分区中,我们看到End的值为125,而这个移动硬盘的cylinder也是125,这能说明这个硬盘不可能再添加任何主分区了;根据我们上面所说的 sda1 sda2 sda5 sda6 之间未有任何未划分空间,但sda6 的cylinders (柱体)的End值却是 76 ,而 sda总的cylinders (柱体)有125个,由此看来sda 在 sda6后面有未划分区域;
至于sda 有多少未划分空间,我们算一下就知道了;扩展分区总容量是 806400 K ,大约是 806.400M左右,而逻辑分区 sda5 和sda6 的大小加起来是 400M左右,所以还仍有400M左右未划分空间,并且只能划分为链逻辑分区;
四、fdisk 对硬盘及分区的操作,进入fdisk 对硬盘操作阶段;
我们可以对硬盘进行分区操作,前提是您把fdisk -l 弄明白了;通过fdisk -l ,我们能找出机器中所有硬盘个数及设备名称;比如上面的例子,我们会看到两个设备一个是/dev/hda ,另一个是/dev/sda ;
fdisk 操作硬盘的命令格式如下:
[root@localhost beinan]# fdisk 设备
比如我们通过 fdisk -l 得知 /dev/hda 或者 /dev/sda设备;我们如果想再添加或者删除一些分区,可以用
[root@localhost beinan]# fdisk /dev/hda
或
[root@localhost beinan]# fdisk /dev/sda
注 在以后的例子中,我们要以 /dev/sda设备为例,来讲解如何用fdisk 来操作添加、删除分区等动作;
1、fdisk 的说明;
当我们通过 fdisk 设备,进入相应设备的操作时,会发现有如下的提示;以 fdisk /dev/sda 设备为例,以下同;
[root@localhost beinan]# fdisk /dev/sda
Command (m for help): 在这里按m ,就会输出帮助;
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition 注:这是删除一个分区的动作;
l list known partition types 注:l是列出分区类型,以供我们设置相应分区的类型;
m print this menu 注:m 是列出帮助信息;
n add a new partition 注:添加一个分区;
o create a new empty DOS partition table
p print the partition table 注:p列出分区表;
q quit without saving changes 注:不保存退出;
s create a new empty Sun disklabel
t change a partition's system id 注:t 改变分区类型;
u change display/entry units
v verify the partition table
w write table to disk and exit 注:把分区表写入硬盘并退出;
x extra functionality (experts only) 注:扩展应用,专家功能;
其实我们常用的只有注有中文的,其它的功能我们不常用(呵,主要是我不会用,否则早会卖弄一下了);x扩展功能,也不是常用的;一般的情况下只要懂得 d l m p q t w 就行了;
下面以实例操作来详述,没有例子没有办法就,新手也看不懂;
2、列出当前操作硬盘的分区情况,用p;
Command (m for help): p
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
/dev/sda6 51 76 200781 83 Linux
3、通过fdisk的d指令来删除一个分区;
Command (m for help): p 注:列出分区情况;
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
/dev/sda6 51 76 200781 83 Linux
Command (m for help): d 注:执行删除分区指定;
Partition number (1-6): 6 注:我想删除 sda6 ,就在这里输入 6 ;
Command (m for help): p 注:再查看一下硬盘分区情况,看是否删除了?
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
Command (m for help):
警告:删除分区时要小心,请看好分区的序号,如果您删除了扩展分区,扩展分区之下的逻辑分区都会删除;所以操作时一定要小心;如果知道自己操作错了,请不要惊慌,用q不保存退出;切记切记!!!!在分区操作错了之时,千万不要输入w保存退出!!!
4、通过fdisk的n指令增加一个分区;
Command (m for help): p
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
Command (m for help): n 注:增加一个分区;
Command action
l logical (5 or over) 注:增加逻辑分区,分区编号要大于5;为什么要大于5,因为已经有sda5了;
p primary partition (1-4) 注:增加一个主分区;编号从 1-4 ;但sda1 和sda2都被占用,所以只能从3开始;
p
Partition number (1-4): 3
No free sectors available 注:失败中,为什么失败?
注:我试图增加一个主分区,看来是失败了,为什么失败?因为我们看到主分区+扩展分区把整个磁盘都用光了,看扩展分区的End的值,再看一下 p输出信息中有125 cylinders;最好还是看前面部份;那里有提到;
所以我们只能增加逻辑分区了;
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l 注:在这里输入l,就进入划分逻辑分区阶段了;
First cylinder (51-125, default 51): 注:这个就是分区的Start 值;这里最好直接按回车,如果您输入了一个非默认的数字,会造成空间浪费;
Using default value 51
Last cylinder or +size or +sizeM or +sizeK (51-125, default 125): +200M 注:这个是定义分区大小的,+200M 就是大小为200M ;当然您也可以根据p提示的单位cylinder的大小来算,然后来指定 End的数值。回头看看是怎么算的;还是用+200M这个办法来添加,这样能直观一点。如果您想添加一个10G左右大小的分区,请输入 +10000M ;
Command (m for help):
5、通过fdisk的t指令指定分区类型;
Command (m for help): t 注:通过t来指定分区类型;
Partition number (1-6): 6 注:要改变哪个分区类型呢?我指定了6,其实也就是sda6
Hex code (type L to list codes):L 注:在这里输入L,就可以查看分区类型的id了;
Hex code (type L to list codes): b 注:如果我想让这个分区是 W95 FAT32 类型的,通过L查看得知 b是表示的是,所以输入了b;
Changed system type of partition 6 to b (W95 FAT32) 注:系统信息,改变成功;是否是改变了,请用p查看;
Command (m for help): p
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
/dev/sda6 51 75 201568+ b W95 FAT32
6、fdisk 的退出,用q或者 w;
其中 q是 不保存退出,w是保存退出;
Command (m for help): w
或
Command (m for help): q
7、一个添加分区的例子;
本例中我们会添加两个200M的主分区,其它为扩展分区,在扩展分区中我们添加两个200M大小的逻辑分区;
Command (m for help): p 注:列出分区表;
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
Device Boot Start End Blocks Id System
Command (m for help): n 注:添加分区;
Command action
e extended
p primary partition (1-4)
p 注:添加主分区;
Partition number (1-4): 1 注:添加主分区1;
First cylinder (1-125, default 1): 注:直接回车,主分区1的起始位置;默认为1,默认就好;
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-125, default 125): +200M 注:指定分区大小,用+200M来指定大小为200M
Command (m for help): n 注:添加新分区;
Command action
e extended
p primary partition (1-4)
p 注:添加主分区
Partition number (1-4): 2 注:添加主分区2;
First cylinder (26-125, default 26):
Using default value 26
Last cylinder or +size or +sizeM or +sizeK (26-125, default 125): +200M 注:指定分区大小,用+200M来指定大小为200M
Command (m for help): n
Command action
e extended
p primary partition (1-4)
e 注:添加扩展分区;
Partition number (1-4): 3 注:指定为3 ,因为主分区已经分了两个了,这个也算主分区,从3开始;
First cylinder (51-125, default 51): 注:直接回车;
Using default value 51
Last cylinder or +size or +sizeM or +sizeK (51-125, default 125): 注:直接回车,把其余的所有空间都给扩展分区;
Using default value 125
Command (m for help): p
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ 83 Linux
/dev/sda2 26 50 201600 83 Linux
/dev/sda3 51 125 604800 5 Extended
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l 注:添加逻辑分区;
First cylinder (51-125, default 51):
Using default value 51
Last cylinder or +size or +sizeM or +sizeK (51-125, default 125): +200M 注:添加一个大小为200M大小的分区;
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l 注:添加一个逻辑分区;
First cylinder (76-125, default 76):
Using default value 76
Last cylinder or +size or +sizeM or +sizeK (76-125, default 125): +200M 注:添加一个大小为200M大小的分区;
Command (m for help): p 列出分区表;
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ 83 Linux
/dev/sda2 26 50 201600 83 Linux
/dev/sda3 51 125 604800 5 Extended
/dev/sda5 51 75 201568+ 83 Linux
/dev/sda6 76 100 201568+ 83 Linux
然后我们根据前面所说通过t指令来改变分区类型;
最后不要忘记w保存退出;
五、对分区进行格式化,以及加载;
先提示一下;用 mkfs.bfs mkfs.ext2 mkfs.jfs mkfs.msdos mkfs.vfatmkfs.cramfs mkfs.ext3 mkfs.minix mkfs.reiserfs mkfs.xfs 等命令来格式化分区,比如我想格式化 sda6为ext3文件系统,则输入;
[root@localhost beinan]# mkfs.ext3 /dev/sda6
如果我想加载 sda6到目前系统来存取文件,应该有mount 命令,但首先您得建一个挂载目录;比如 /mnt/sda6 ;
[root@localhost beinan]# mkdir /mnt/sda6
[root@localhost beinan]# mount /dev/sda6 /mnt/sda6
[root@localhost beinan]# df -lh
Filesystem 容量 已用 可用 已用% 挂载点
/dev/hda8 11G 8.4G 2.0G 81% /
/dev/shm 236M 0 236M 0% /dev/shm
/dev/hda10 16G 6.9G 8.3G 46% /mnt/hda10
/dev/sda6 191M 5.6M 176M 4% /mnt/sda6
这样我们就能进入 /mnt/sda6目录,然后存取文件了; 参考技术A DOS下对系统重新进行分区
硬盘分区是使用DOS系统的FDISK命令来完成的。
一、分区前的准备
在进行硬盘分区之前,先要准备一张能够在A驱启动电脑的系统盘,该系统盘应含有以下2个文件:
FDISK.EXE 硬盘分区程序
FORMAT.COM 磁盘格式化程序
确信Bios CMOS中“BOOT SEQUENCE(启动顺序)”参数为“A,C”。放入启动盘,开机,至屏幕出现A:\>,此时即完成硬盘分区前的准备工作。
二、删除硬盘原有的分区
(一)在盘符A:\>下键入:FDISK
屏幕显示FDISK命令主菜单(FDISK Options):
FDISK Options
Current fixed disk drive:1
1.Create DOS partition or Logical DOS Drive
2.Set active partition
3.Delete partition or Logical DOS Drive
4.Display partition information
Enter choice:[1]
Press Esc to exit FDISK
(二)选择3,删除原有的全部分区。
屏幕显示删除分区菜单:
Choose one of the follwing:
1.Delete Primary DOS Partition
2.Delete Extended DOS Partition
3.Delete Logical DOS Drive(s) in the Extended DOS Partition
4.Delete Non-DOS Partition
Enter choice:[ ]
删除硬盘分区的规则是:删除非DOS分区→删除逻辑分区→删除扩展分区→删除基本分区,因此删除必须严格按照4→3→2→1的顺序进行。
三、建立新的硬盘分区
目前1G以上的硬盘一般设2-3个分区,各个分区的大小及安装内容完全可以自行决定。在FDISK命令主菜单中选择1,回车,建立DOS分区;
屏幕显示建立分区菜单:
Choose one of the following:
1.Create Primary DOS Partition
2.Create Extended DOS Partition
3.Create Logical DOS Drives in the Extended DOS Partition
Enter choice:[1]
Press Esc to return to FDISK Options
建立硬盘分区的规则是:建立基本分区→建立扩展分区→再分成1~X个逻辑驱动器。因此建立分区必须严格按照1→2→3的顺序进行。
(一)建立基本DOS分区
选择建立 菜单中的1,回车。
屏幕显示:
Do you wish to use the maximum available size for a Primary DOS Partition and make the Partition active(Y/N)……[Y]
系统提问是否将硬盘的全部容量划分为基本分区,即C区?
1.如果打算整个硬盘只设1个区,即将所有空间全部给基本DOS分区(C盘),则选择Y,回车。
2.如果要将硬盘分为几个区,就只能将部分硬盘分给基本DOS分区,因此必须选择N,回车。
屏幕显示:
Totally disk space is X Mbytes (1Mbytes=1048576 bytes)
Maximum space available for Partition is X Mbytes (100%)
Enter Partition size in Mbytes or percent of disk space (%)
to create a Primary DOS Partition……:[ ]
No Partition defined
系统显示硬盘总容量,同时提问基本DOS分区即C区分为多大?键入拟给C区的容量数值(设为X1)或占用总容量的%(设为Y1%),[]中的数字就会自动改为输入数字,回车,屏幕显示重新分区后的C区信息:
Partition Status Type Volume Label Mbytes System Usage
C:1 PRI DOS X1 UNKNOWN Y1%
Primary DOS Partition created
表示基本DOS分区已经建立好,按Esc键返回到FDISK命令主菜单。
(二)建立扩展DOS分区和逻辑驱动器
选择FDISK命令主菜单中的1,回车,屏幕显示建立分区菜单,再选择其中的2,回车。屏幕显示已分出基本DOS分区后的当前硬盘信息:
Totally disk space is X Mbytes
Maximum space available for Partition is X-X1 Mbytes (100%-Y1%)
Enter Partition size in Mbytes or percent of disk
Space (%) to create a Extended DOS Partition……[X-X1]
No Partition defined
系统提示硬盘剩余X-X1兆字节可以定义为扩展DOS分区。因为硬盘上只能有1个基本分区和1个扩展分区,所以如果不想使用非DOS分区,则应按回车键确认将建立基本分区之后的所有剩余硬盘空间全部作为扩展分区(注意此时不能更改[]内的硬盘空间剩余字节数,如果将剩余空间数值改小,就会损失部分硬盘空间)。
回车,屏幕显示在扩展DOS分区中建立逻辑驱动器的提示:
Totally Extended DOS Partition size is X-X1 Mbytes
Maximum space available for Logical drives is X-X1 Mbytes (100%)
Enter Logical drives size in Mbytes or percent of disk space(%) ……:[]
系统询问在扩展分区中如何划分逻辑驱动器,如只设1个逻辑驱动器(D盘),则直接回车,如想分成多个逻辑驱动器,则输入拟给D盘(第一逻辑驱动器)的硬盘容量数值(X1),回车。
屏幕显示已分成的D盘信息(内容与上表基本相同),表示逻辑D盘已经建立,剩余空间将给逻辑E盘,输入拟给E盘(第二逻辑驱动器)的容量数值(X3),回车……
全部硬盘容量分配完毕后,屏幕显示扩展分区中所有逻辑驱动器的信息;
Drv Volume Label Mbytes System Usage
D: X2 UNKNOWN Y2%
E: X3 UNKNOWN Y3%
All available space in the Extended DOS Partition is assigned to logical drives
按Esc键返回FDISK命令主菜单,系统用闪动的“Warning”提示还必须设置活动分区。
(三)建立活动分区
选择FDISK命令主菜单中的2,回车:
屏幕显示建立活动分区菜单:
Partition Status Type Volume Label Mbytes System Usage
C:1 PRI DOS X1 Y1%
2 EXT DOS X-X1 X-Y1%
Totally disk space is X Mbytes
Enter the number of the partition you want to make active……[ ]
在空格[]内键入1:这时只能键入1,即将基本DOS分区设置为活动分区,回车,屏幕显示已设置好的活动分区信息:
Partition Status Type Volume Label Mbytes System Usage
C: A PRI DOS X1 UNKNOWN Y1%
2 EXT DOS X-X1 UNKNOWN X-Y1%
Totally disk space is X Mbytes
Partition 1 make active
Status(状态)项下出现A,表示基本分区已被激活,按Esc键返回FDISK命令主菜单。再按Esc键,退出FDISK命令,屏幕显示将重新启动电脑。此时DOS系统盘或MS-DOS6.22系统安装盘中的1号盘应在A驱中。电脑重新启动,待出现盘符A:\>,即宣告硬盘重新分区结束。
第二步:对硬盘进行高级格式化
对硬盘进行高级格式化的操作是使用DOS系统的FORMAT(格式化磁盘)命令来完成的。
一、格式化C盘
在盘符A:\>后键入FORMAT C:/U/S
FORMAT命令后加“/S”开头项是为了使格式化后的C盘成为启动盘,此项是必不可少的!否则格式化后的硬盘将无法用来启动电脑。
二、格式化D、E、……盘
在A:\>下再分别输入FORMAT D:/U;FORMAT E:/U……对D、E……盘进行格式化,此时注意不要加“/S”开关项。
对硬盘的各个分区格式化后,从A驱中取出DOS系统盘或MS-DOS6.221号盘(Disk1),按下Ctrl+Alt+Del重新启动,电脑即从C盘引导DOS系统,最后屏幕显示C:\>提示符,说明硬盘的格式化已经完成。
第三步:安装操作系统前的准备
主要是对BIOS CMOS参数进行必要的设置,禁止反病毒程序、电源管理程序等,以使操作系统软件的安装能够顺利完成。
进入BIOS CMOS参数设置,将“BIOS FEATURES SETUP”中的“Virus Warning”项设为“Disabled”;再将“POWER MANAGEMENT SETUP”中的“Power Management”项设为“Disabled”,保存并退出BIOS CMOS设置。
参考资料:http://www.softhouse.com.cn/html/200411/2004112610305900002350.html
参考技术B 英文含义:1. 建立DOS主分区和逻辑DOS分区。
2. 设置活动分区。
3. 删除分区和逻辑DOS分区。
4. 显示当前的分区情况。 参考技术C 1、创建DOS分区或逻辑分区
2、设置活动分区
3、删除DOS分区或逻辑分区
4、显示分区信息本回答被提问者采纳
关于C/C++的一些问题,着急找高手求助
请高手帮我回答一下这7个问题,非常着急,回答满7题者才给分,工作面视急需:
1.new和malloc有什么区别?
2.inline函数有什么特点和优点?
3.堆和栈有什么区别?
4.static函数和变量有什么特点?
5.“extern C”有什么意义?
6.C语言的关键字volatile的含义?
7.assert有什么作用?
malloc是C跟C++都可以用的
不能进行类型检查之类
如果是在C++中,推荐使用new
inline函数区别与普通函数在于调用普通函数时程序有压栈和出栈操作,而inline(内联)函数编译器在预处理的时候会把它的代码加到调用它的函数中,而不用额外的跳转操作,从而提高了程序的效率。
但是inline不允许有switch, 循环等复杂语句。
堆,可用NEW对它分配内存,DELETE销毁内存空间。
栈,是由程序本身建立,分配,消除的内存空间!他服从先进后出(FILO)的原则,从而可以把各个变量按生存期分开!
static 声明的变量在C语言中有两方面的特征:
1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。
2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。
Tips:
A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;
D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数)
E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。
函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。
扩展分析:术语static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。最后,C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java中此关键字的含义相同)。
全局变量、静态全局变量、静态局部变量和局部变量的区别变量可以分为:全局变量、静态全局变量、静态局部变量和局部变量。
按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。
按作用域分,全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。
从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。
static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件
static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知。
C++中extern “C”含义深层探索
1.引言
C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C 语言的全局变量
和函数所采用的编译和链接方式与C 语言完全相同。作为一种欲与C 兼容的语言,C++保留了
一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟
是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C 有明
显的不同。
2.从标准头文件说起
某企业曾经给出如下的一道面试题:
面试题
为什么标准头文件都有类似以下的结构?
#ifndef _TEST_H
#define _TEST_H
#ifdef __cplusplus
extern "C"
#endif
/*...*/
#ifdef __cplusplus
#endif
#endif /* _TEST_H */
分析
显然,头文件中的编译宏“#ifndef _TEST_H、#define _TEST_H、#endif” 的作用是防止
该头文件被重复引用。
那么
#ifdef __cplusplus
extern "C"
#endif
#ifdef __cplusplus
#endif
的作用又是什么呢?
3.深层揭密extern "C"
extern "C" 包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”的;
其次,被它修饰的目标是“C”的。让我们来详细解读这两重含义。
被extern "C"限定的函数或变量是extern 类型的;
extern 是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告
诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。记住,下列语句:
extern int a;
仅仅是一个变量的声明,其并不是在定义变量a,并未为a 分配内存空间(特别注意:实
际上现在一般的编译器都会对上述语句作声明处理,但链接器在链接过程中如果没有发现该
变量的定义,一般会在第一次遇到该变量声明的地方,自动定义)。变量a 在所有模块中作为
一种全局变量只能被定义一次,否则会出现连接错误。
通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字
extern 声明。例如,如果模块B 欲引用该模块A 中定义的全局变量和函数时只需包含模块A
的头文件即可。这样,模块B 中调用模块A 中的函数时,在编译阶段,模块B 虽然找不到该
函数,但是并不会报错;它会在连接阶段中从模块A 编译生成的目标代码中找到此函数。
与extern 对应的关键字是static,被它修饰的全局变量和函数只能在本模块中使用。因
此,一个函数或变量只可能被本模块使用时,其不可能被extern “C”修饰。
被extern "C"修饰的变量和函数是按照C 语言方式编译和连接的;
未加extern “C”声明时的编译方式
首先看看C++中对类似C 的函数是怎样编译的。
作为一种面向对象的语言,C++支持函数重载,而过程式语言C 则不支持。函数被C++编
译后在符号库中的名字与C 语言的不同。例如,假设某个函数的原型为:
void foo( int x, int y );
该函数被C 编译器编译后在符号库中的名字为_foo,而C++编译器则会产生像
_foo_int_int 之类的名字(不同的编译器可能生成的名字不同,但是都采用了相同的机制,
生成的新名字称为“mangled name”)。
_foo_int_int 这样的名字包含了函数名、函数参数数量及类型信息,C++就是靠这种机制
来实现函数重载的。例如,在C++中,函数void foo( int x, int y )与void foo( int x, float
y )编译生成的符号是不相同的,后者为_foo_int_float。
同样地,C++中的变量除支持局部变量外,还支持类成员变量和全局变量。用户所编写程序的
类成员变量可能与全局变量同名,我们以"."来区分。而本质上,编译器在进行编译时,与函
数的处理相似,也为类中的变量取了一个独一无二的名字,这个名字与用户程序中同名的全
局变量名字不同。
未加extern "C"声明时的连接方式
假设在C++中,模块A 的头文件如下:
// 模块A 头文件 moduleA.h
#ifndef MODULE_A_H
#define MODULE_A_H
int foo( int x, int y );
#endif
在模块B 中引用该函数:
// 模块B 实现文件 moduleB.cpp
#i nclude "moduleA.h"
foo(2,3);
实际上,在连接阶段,连接器会从模块A 生成的目标文件moduleA.obj 中寻找
_foo_int_int 这样的符号!
加extern "C"声明后的编译和连接方式
加extern "C"声明后,模块A 的头文件变为:
// 模块A 头文件 moduleA.h
#ifndef MODULE_A_H
#define MODULE_A_H
extern "C" int foo( int x, int y );
#endif
在模块B 的实现文件中仍然调用foo( 2,3 ),其结果是:
(1)模块A 编译生成foo 的目标代码时,没有对其名字进行特殊处理,采用了C 语言的
方式;
(2)连接器在为模块B 的目标代码寻找foo(2,3)调用时,寻找的是未经修改的符号名_foo。
如果在模块A 中函数声明了foo 为extern "C"类型,而模块B 中包含的是extern int
foo( int x, int y ) ,则模块B 找不到模块A 中的函数;反之亦然。
所以,可以用一句话概括extern “C”这个声明的真实目的(任何语言中的任何语法特
性的诞生都不是随意而为的,来源于真实世界的需求驱动。我们在思考问题时,不能只停留
在这个语言是怎么做的,还要问一问它为什么要这么做,动机是什么,这样我们可以更深入
地理解许多问题):
实现C++与C 及其它语言的混合编程。
明白了C++中extern "C"的设立动机,我们下面来具体分析extern "C"通常的使用技巧。
4.extern "C"的惯用法
(1)在C++中引用C 语言中的函数和变量,在包含C 语言头文件(假设为cExample.h)
时,需进行下列处理:
extern "C"
#i nclude "cExample.h"
而在C 语言的头文件中,对其外部函数只能指定为extern 类型,C 语言中不支持extern
"C"声明,在.c 文件中包含了extern "C"时会出现编译语法错误。
笔者编写的C++引用C 函数例子工程中包含的三个文件的源代码如下:
/* c 语言头文件:cExample.h */
#ifndef C_EXAMPLE_H
#define C_EXAMPLE_H
extern int add(int x,int y);
#endif
/* c 语言实现文件:cExample.c */
#i nclude "cExample.h"
int add( int x, int y )
return x + y;
// c++实现文件,调用add:cppFile.cpp
extern "C"
#i nclude "cExample.h"
int main(int argc, char* argv[])
add(2,3);
return 0;
如果C++调用一个C 语言编写的.DLL 时,当包括.DLL 的头文件或声明接口函数时,应加
extern "C" 。
(2)在C 中引用C++语言中的函数和变量时,C++的头文件需添加extern "C",但是在C
语言中不能直接引用声明了extern "C"的该头文件,应该仅将C 文件中将C++中定义的extern
"C"函数声明为extern 类型。
笔者编写的C 引用C++函数例子工程中包含的三个文件的源代码如下:
//C++头文件 cppExample.h
#ifndef CPP_EXAMPLE_H
#define CPP_EXAMPLE_H
extern "C" int add( int x, int y );
#endif
//C++实现文件 cppExample.cpp
#i nclude "cppExample.h"
int add( int x, int y )
return x + y;
/* C 实现文件 cFile.c
/* 这样会编译出错:#i nclude "cExample.h" */
extern int add( int x, int y );
int main( int argc, char* argv[] )
add( 2, 3 );
return 0;
如果深入理解了第3 节中所阐述的extern "C"在编译和连接阶段发挥的作用,就能真正
理解本节所阐述的从C++引用C 函数和C 引用C++函数的惯用法。对第4 节给出的示例代码,
需要特别留意各个细节。
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。
例如:
volatile int i=10;
int j = i;
...
int k = i;
volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中。
而优化做法是,由于编译器发现两次从i读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在k中。而不是重新从i里面读。这样以来,如果i是一个寄存器变量或者表示一个端口数据就容易出错,所以说volatile可以保证对特殊地址的稳定访问,不会出错。
断言(assert)是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 Assertionerror。它用于调试目的:
assert(a > 0); // throws an Assertionerror if a <= 0
断言可以有两种形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 应该总是产生一个布尔值。
Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。
断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记:
javac -source 1.4 Test.java
要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。
要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。
要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。
可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。 参考技术A 上面的那么长篇大论,面试时有那么多时间去回答吗,别人一听就知道从哪里抄来的而不是自己理解的.不容易过关.
1. malloc与new都是用来申请空间用的,但在C++中却很少用malloc去申请空间.因为malloc只负责给对象指针分配空间,而不去调用构造函数和对其初始化.C++中一个类的对象构造,是需要分配空间的,调用构造函数以及对其初始化.
2. 由于函数内数据的内存空间是有限的,如果频繁大量的使用函数就会造成空间不足所造成的程序出错的问题,而使用inline就避免了频繁调用函数对栈内存重复开辟所带来的消耗.
3. 堆,可用NEW对它分配内存,DELETE销毁内存空间。
栈,是由程序本身建立,分配,消除的内存空间!他服从先进后出(FILO)的原则,从而可以把各个变量按生存期分开!
4. Static函数在调用时不会加上this指针,所以它是属于整个类的,而不对应于某一个实例对象.用它可以操纵静态变量,但不能控制非静态的成员变量
Static变量可以在没有对象的时候存在,并且所有对象都共享该变量.而其它变量必须要有对象存在时才存在,而且每当创建一个对象的时候就从改变量处
复制一份.
5. 主要用于动态链接库,使得导出函数名称与C语言规则一致(不改变),方便不同的编译器甚至是不同的开发语言调用。
6. volatile定义是这样的: 用该类型定义的变量意味着没有具体的赋值也会改变,是为了提示系统,防止意外用的. 例如,某一个指针赋值了系统的时钟程序入口,其值即使没有在程序中改变,也会随时变化,而用了volatile定义,系统就会提前注意到这个. 综合两点作用:防错,优化.
7. 一个判断宏.如果不符合条件会给出一个错误码提示.且只在debug状态下有用.这样你用release时就不会出现多余的代码了。 参考技术B 发下我的观点,补充下楼上的第一和第二点,其他的基本同意,分给他吧:
1.new和malloc有什么区别?
new除了开辟所给类型所需要的内存空间以外,同时还调用该类型的构造函数进行构造,而malloc则只有分配内存这一个动作,不会调用构造函数。
2.inline函数有什么特点和优点?
补充:不是不允许,只要你愿意,你在inline函数里写什么都可以,只是如果inline函数的代码量过大的话,就违背了inline函数出现的初衷以及使用它的原则。
inline函数是为比较短小的,而又被频繁使用的过程所服务的,以此来减少函数调用时跳转指令和保存寄存器内容(比如esp等)的开销,以前人们喜欢用宏来实现这个功能,但宏有其本质上的缺点,比如无类型检查等。
如果inline函数代码过多的话,不仅体现不了inline函数的优化效果,而且还会造成程序代码的膨胀,得不偿失啊呵呵。
所以inline函数里原则上不应该有循环、跳转或开关语句等。 参考技术C 哎呀,如果我是你的面试的主考官,那么我不得不对你说,真的很遗憾!
如果你这些都不懂,你还去找这样的工作?!
建议你还去看看C++ PRIMER!
以上是关于关于 FDISK 的问题 请 高手回答的主要内容,如果未能解决你的问题,请参考以下文章