Linux系统分区和挂载浅谈

转自:  https://blog.csdn.net/cc_net/article/details/2894510


好久没有写BLOG了,之前出差了2个月,都没怎么看书,也没有太多时间写。回来后一个月人也有点放松。现在开始还是得继续努力啊。不废话了,下面就介绍下Linux系统的分区和挂载

 

一 Linux的安装

 Linux的安装是比较简单的,整个过程和安装XP差不多。首先BIOS中设置从光驱启动,(不知道怎么设置?那你还是先装虚拟机玩玩吧!)会要你选安装模式,直接回车用图形界面;然后Linux安装程序会有一个检查光盘的过程,这里可以选择跳过【Skip】;然后等待初始化工作,系统就可以进入到安装界面了;进入安装界面后就可以进行一些设置(区域,语言,时间,密码,分区等),设置完成后选择要安装的组件,安装完成就一切OK了。

  

二 Linux系统分区

这里我说的是指在分区时采用手动分区,而不是自动分区。Linux分区和Windows有很大的区别,你无法在Linux中看到诸如Windows中的C盘,D盘。这确实会让我们这些用惯了WIN操作系统的人感到很不习惯。其实理解了Linux分区结构后就很清晰了。

 

1: 硬盘分区

首先我们来看硬盘分区,分区是和操作系统没有任何关系的,因为她是在安装操作系统之前进行了。我们可以简单的认识,分区就是把硬盘分割为不同的区域。在谈具体分区前,有个比较简单的问题想问下大家:硬盘问什么要分区?.....哈哈!怎么样,不是很好回答吧,首先是因为操作系统在启动时会通过MBR来获得操作系统文件所在的分区,所以一个可引导分区是不能缺少的。这也是为什么新买的硬盘不能直接用的原因。而且进行多个分区是为了提高管理效率,所有东西放在一个分区,OS管理其起来效率比较低,因为每次要检索的东西太多。

 

下面我们简单看下硬盘的分区结构:

 

硬盘主引导扇区 = 硬盘主引导记录(MBR)+ 硬盘分区表(DPT),一共是512个字节,其中MBR是446,分区表一共64字节,然后是2个字节的结束标志。引导扇区存储在硬盘的0头0道1扇区,也就是Boot Sector。(如图1)

 

操作系统在启动时通过BIOS(BIOS实际是一个基础输入输出系统,用于和硬件打交到)程序把Boot Sector读入内存,然后执行其中MBR,这个时候BIOS就把启动交给MBR控制;MBR作用是在4个分区表中搜索标志为活动的分区,找到后把活动分区的第一个扇区读入内存,然后开始执行它,运行特定系统的启动程序(LILO,GRUB,NT Loader);这个时候启动的启动就交给了操作系统的引导程序来控制了。然后操作系统进行一系列的初始化,最后把系统交给系统内核进行管理。

                                  图 1

 2:分区类型

上面介绍了硬盘分区结构和系统启动,下面就看下各个分区。硬盘分区一共有3种,主分区,扩展分区和逻辑分区(如图2)

                        图 2

 主分区上可以安装操作系统,因为MBR中记录的主分区信息,系统启动时会到主分区来查找操作系统引导文件,所以操作系统的引导文件必须在主分区中,否则系统就无法启动了。而最多只支持4个主分区(由于硬盘仅仅为分区表保留了64个字节的存储空间,而每个分区的参数占据16个字节,故主引导扇区中总计可以存储4个分区的数据。操作系统只允许存储4个分区的数据。所以为了建立更多的逻辑磁盘供操作系统使用,系统引入了扩展分区的概念)。

  扩展分区并不是一个真实存在的分区,它只是内存管理链表中的一个指针,指示出那一块区域是扩展分区。上面也提到出现扩展分区的原因。所以一个扩展分区也是一个主分区。而通过在扩展分区中在划分逻辑分区对系统分区进行扩展。实际上所有的逻辑分区都是在一个分区类,只是逻辑上分开,这也是叫逻辑分区的原因。但对用户来说一切都是透明了,我们看起来系统中有很多分区。

  

3:Linux分区

其面介绍了硬盘分区结构和分区类型,这里就要讲讲Linux系统中分区的表示了。首先回顾下WINDOWS下分区的情况。在WINDOWS系统里,我们看到,每个分区都有一个名字,C,D,E,F....实际这是OS使用的一种映射。通过操作系统中看到的这些盘符和分区联系起来,然后我们就可以在这些盘符下读写文件,操作系统负责把文件写入到硬盘分区。在WINDOWS中盘符名称和分区是对应了。

 

我们在来看看LINUX下的情况,在Linux下使用/dev/hda,hdb..这样来标识硬盘,具体硬盘上的分区就用/dev/hda1,hda2,来表示.最后的数字代表分区号,主分区是1-4,逻辑分区是5以后的数字。Linux中最大的区别就是我们在也看不到所谓的盘符了。Liunx采用树形的文件管理系统,也就是在Linux系统中,可以说已经没有分区的概念了。分区在Linux和其他设备一样都只是一个文件。要使用一个分区必须把它加载到文件系统中。这可能难于理解,继续往下看。

 

Linux中树形的文件结构,最顶层是/ 目录。在安装系统时,你必须选择把一个主分区挂载在/ 目录下,因为系统需要安装在/挂载的主分区下。否则系统会提示你。这里又一次提到了挂载。所以挂载就是把目录和分区连接起来,和上面说的WINDOWS下的映射关系是一样的。不同的是WINDOWS是把分区映射到一个盘符,而LINUX下是映射到一个目录。 这是理解他们不同最重要的地方,而导致不同的是因为文件系统结构不同。

  

4:Linux文件系统

上面说了Linux的文件系统是树形的,安装的系统必须是在/ 目录下,因为/目录下挂载了一个主分区。/目录是树形的根,其他所有目录都是他的子节点。 

                                                                                                            图 3

 

我们看上图3 可以更好的理解, Linux整个系统结构如上, 我们安装系统的时候已经把分区1挂载到 / 目录下了. 而这个时候没有挂载其他任何分区,所以/ 目录下的所有其他目录都在这个分区下,也就是说,我在任何目录下读写操作实际都是操作的这个1号分区。

 

如果我们想使用其他分区,就必须把这个分区挂载到一个目录下,这个目录可以是已经存在的目录,比如/home,也可以是我们自己建立的目录,比如/oracle。当然有些目录比如/lib, /dev, /etc, /usr这些都不能挂载其他分区,因为他们都存放着系统需要的文件,一旦被挂载其他分区,那没OS就无法找到所需的文件,系统就会崩溃。比如我们把分区2挂载到/usr/X11目录下时,系统就无法通过X11目录找到分区1上的文件,这个时候系统图形界面就无法使用了. 虽然文件还在硬盘上。前面说过,目录 --- 分区 是通过挂载吧他们联系起来。你更换了分区,也就破坏了联系,就无法在找到之前的文件了。我们在看分区5和分区6,我们把它挂载到/home/ftp 和 /oracle目录下,这个时候我们在操作这2个目录是,就是操作对用的分区了.

 

而WINDOWS就没这么复杂,她不是采用树形的结构,每个分区对应一个盘符,一旦建立映射关系就无法在修改。实际上,LINUX的每个挂载了分区的目录就相当于WINDOWS系统中的盘符,比如上面的,/home/ftp 和 /oracle目录我们就可以把她看做一个盘符和一个分区关联,只是因为LINUX文件系统,使得她更加灵活,所以也更复杂和难以理解。

  

三    Linux中的设置 

1:查看Linux分区信息

前面介绍完了Linux文件系统和分区的关系,大家应该对分区有很清楚的认识了。下面我们就关注下Linux系统中如何查看分区情况。

在Linux系统中我们使df -u 命令就可以看到系统目前分区情况

  1. Filesystem            容量      已用      可用        已用%    挂载点
  2. /dev/hda1              21G       6.7G        13G        35%          /
  3. none                     506M       0          506M       0%           /dev/shm
  4. /dev/hda2              11G       5.2G        5.0G       52%         /home
  5. /dev/hda5              16G       9.3G        5.1G       65%         /oracle
  6. /dev/hda6              19G       201M      18G        2%           /usr1

从中我们可以看到目前系统加载了4个分区,其中2个主分区(hda1,hda2)和两个逻辑分区(hda5,hda6)。也可以看到他们的加载点。其中hda1分区是系统分区,上面安装了操作系统。而/home,/orace,/usr1分别加载了其他3个分区。

 

而通过fdisk -l 命令可以看到目前系统中所有分区的信息,如下表

  1. Disk /dev/hda: 80.0 GB, 80026361856 bytes
  2. 255 heads, 63 sectors/track, 9729 cylinders
  3. Units = cylinders of 16065 * 512 = 8225280 bytes
  4.    Device Boot      Start         End      Blocks   Id  System
  5. /dev/hda1   *           1        2677    21502971   83  Linux
  6. /dev/hda2            2678        4079    11261565   83  Linux
  7. /dev/hda3            4080        9729    45383625    5  Extended
  8. /dev/hda5            4080        6080    16073001   83  Linux
  9. /dev/hda6            6081        8581    20089251   83  Linux
  10. /dev/hda7            8582        9729     9221278+  82  Linux swap

可以看到hda3是一个主分区,但实际上他是一个扩展分区,前面我们介绍了扩展分区,她实际会占用一个主分区,因为MBR只能记录4个分区信息. 由一个比较特殊的是hda7,她是一个交换分区,在WINDOWS系统中就是虚拟内存文件. 所以用df命令是查看不到她的.

 

这里顺便说下为什么标识为/dev/hda,前面简单提到过,LINUX下所有设备都被认为是文件,而/dev目录存放所有系统设备文件的,而一个分区就是一个文件,名字就是分区的名字.

 

2:Linux分区挂载 

常用的挂载和卸载分区及文件系统的命令是mount和umount ,比如 mount /orace  /dev/hda5,就是把5号分区挂载到/oracle目录下。具体的命令格式就不介绍了,网上很多,也可以使用man来查看。我们这里主要讲讲自动挂载。并经每次都要使用命令手动挂载确实很麻烦,我们可以通过编辑/etc/fstab文件来让系统开机时自动加载(这里介绍的是系统安装好后,使用fdisk分区后,进行加载) 

vi /etc/fstab 就可以看到一下信息:

  1. # This file is edited by fstab-sync - see 'man fstab-sync' for details
  2. LABEL=/                   /                       ext3      defaults        1 1
  3. none                           /dev/pts            devpts  gid=5,mode=620  0 0
  4. none                           /dev/shm           tmpfs   defaults        0 0
  5. LABEL=/home          /home               ext3    defaults        1 2
  6. none                          /proc                  proc    defaults        0 0
  7. none                          /sys                   sysfs   defaults        0 0
  8. LABEL=/oracle        /oracle                ext3    defaults        1 2
  9. LABEL=/usr1           /usr1                  ext3    defaults        1 2
  10. LABEL=SWAP-hda7         swap     swap    defaults        0 0
  11. /dev/hdc                /media/cdrom            auto    pamconsole,fscontext=system_u:object_r:removable_t,exec,no  auto,managed 0 0

这个文件第一列就是具体的分区,第2列是分区挂载的目录,第3列是文件格式,第4列是挂载规则,第5列是备份;0为从不备份,或显示上次至今备份之天数;第7列是启动时fsck检查顺序,0为不检查, “/”永远为1;

 

了解了各个字段我们就具体来看下,其中/ 目录系统会自动写到这个文件中,因为不加载系统如何启动??那几个none挂载的我还不太清楚。我们具体看看我们实际分区的挂载。我们可以在linux中使用fdisk 来进行分区。比如我们用fdisk划分了hda2,5,6,7这4个分区。但我们想使用他们的时候,我们必须手动添加。

 

我们可以通过一下命令来完成自动加载 

  1. mkfs.ext3 /dev/hdax
e2lable /dev/hda2  /home  LABEL=/home          /home               ext3    defaults        1 2     //修改Fstab

 

分区要使用首先要格式化,目前使用较多的是ext3文件格式, 他相对于ext2更安全,更快,但是比较浪费空间了,我80G硬盘用ext3后,可用的只有67G左右,XP下 NTFS和FAT32可是有70G左右的.

 

格式话之后就可以给分区设置一个标签名(一般和要挂载的目录名字相同),然后在fstab文件中添加一行。大家可能有疑问,第一列不是标识分区吗,这里为什么要用标签,其实你也可以用  /dev/hda5 ,这里LABLE是一个分区的标签,你可以把它当作分区的名字。

 

以上就是对一个新建分区自动加载的过程。开机后我们可以通过 vi /etc/mtab查看已经加载的分区和文件系统。

  

3:关于交换分区

目前计算机内存越来越大,LINUX和VISTA都使用了内存做缓存,cached和buffers的区别在于一个是读一个是写。目前系统最大的开销都是I/O操作,通过buffers先把文件读到内存,这样就减少了I/O,而使用cached就是把要写入的文件放到缓存中,操作系统一次写入磁盘,减少I/O。而交换分区是为了解决内存不足,而目前交换分区使用的很少,所以不需要给她分配过大的空间。当然作为小内存机器还是很有用。

 

我们可以单独划分一个分区作为交换分区,比如我们使用前门的hda7作为交换分区。因为他是交换分区,所以文件系统不能是ext3格式,必须是交换分区格式.

 

  1. mkswap -v1 -L SWAP-hda7 /dev/hda7
  2. swapon -a
  3. LABEL=SWAP-hda7     swap       swap    defaults        0 0    //修改Fstab

 用以上的mkswap命令就可以把一个分区格式化为交换分区文件系统,其中-L 参数是设置分区的LABLE名。然后使用swapon -a来关在系统中所有交换分区。最后修改fstab,加入这一句, 开机就可以自动加载交换分区了。

  

4:加载其他文件系统

除了加载Linux系统分区以外,我们还可以加载光驱,软驱,USB存储设备,设置是WINDOWS文件系统。方法和上面完全一样,这里就不废话了。

 最后要注意的是修改fstab要注意,如果设置的不正确,可能导致系统无法启动.所以编辑时要小心.

  

参考资料:

 

Linux系统引导过程及硬盘分区结构论述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330673.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jmap, jhat, jvisualvm:java堆内存对象分析利器

转载自 jmap, jhat, jvisualvm&#xff1a;java堆内存对象分析利器jmap -help查看命令用法。jmap -heap <pid> 查看堆使用情况。jmap -dump导出堆对象文件进行内存分析。jhat -J-Xmx512m -port 8888 1136.txt命令生成分析报告&#xff0c;可通过http访问。访问http://loc…

ajax异步请求

1 什么是异步请求&#xff1f; 在页面不重新加载的情况下&#xff0c;发送请求局部更新页面内容。2 jquery实现异步请求&#xff1f; $.ajax({url:"访问路径",data:"请求参数", //请求参数格式:"namevalue&namevalue&..." 或者 {name:…

Buffers与cached啥区别

转自&#xff1a; https://www.cnblogs.com/argb/p/3448744.html A buffer is something that has yet to be “written” to disk.A cache is something that has been “read” from the disk and stored for later use对于应用程序来说&#xff0c;buffers/cached 是等于可用…

Spring面试题(第一期)

转载自 Spring面试题&#xff08;第一期&#xff09;Spring作为现在最流行的java web开发框架&#xff0c;Spring的应用及其原理的深入了解是每个Java开发程序员必经之路&#xff0c;下面10道面试题是Java开发程序员面试时会经常遇到的题目。 1、为什么要使用Spring框架&#x…

vue的基本语法

vue的基本语法 new Vue({el:"css选择器",//表示vue对象接管的区域&#xff0c;只有在这一块区域内才可以使用vue的方法显示数据。data:{// 定义各种变量&#xff0c;将来变量的值在页面html标签中使用。name:"snake",age:20,user:{username:"jack&quo…

linux-basic(6)linux的文件权限与目录配置

【6.1】用户与用户组 1&#xff09;linux用户身份与用户组记录的文件/etc/passwd 默认情况下所有系统上的账号都记录在该文件&#xff1b;/etc/shadow 用户密码记录在该文件下&#xff1b;/etc/group linux的所有组名记录在该文件下&#xff1b;注意&#xff1a;这3个文件是 li…

阿里巴巴对Java编程【异常处理】的规约

转载自 阿里巴巴对Java编程【异常处理】的规约 异常处理 1. 【强制】 Java 类库中定义的一类 RuntimeException 可以通过预先检查进行规避&#xff0c;而不应该通过 catch 来处理&#xff0c;比如&#xff1a; IndexOutOfBoundsException &#xff0c; NullPointerException 等…

Http协议的请求和响应

1.HTTP协议介绍 HTTP(HyperTextTransferProtocol)&#xff1a;超文本传输协议。HTTP协议是基于TCP/IP协议的。基于请求/响应模型的: 一次请求对应一次响应。传输协议&#xff1a;客户端和服务器端的通信规则(握手规则)。 2.HTTP协议的请求 HTTP协议规定了客户端发给服务器的数…

centos上安装jdk

1&#xff09;下载jdk&#xff1a; http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2&#xff09;放置到/usr/local/software/java 目录下&#xff0c;并解压 tar-xzv -f jdk*.gz 3&#xff09;配置环境变量 vim /etc/profile 追…

阿里巴巴对Java编程【单元测试】的规约

转载自 阿里巴巴对Java编程【单元测试】的规约 单元测试 1. 【强制】好的单元测试必须遵守 AIR 原则。 说明&#xff1a;单元测试在线上运行时&#xff0c;感觉像空气 &#xff08;AIR&#xff09; 一样并不存在&#xff0c;但在测试质量的保障上&#xff0c;却是非常关键的。好…

linux-basic(7)linux文件与目录管理

【7.1】目录与路径 【7.1.2】目录相关操作1&#xff09;特殊目录列表&#xff1a;(1)2&#xff09;目录操作命令&#xff0c;底下我们就来谈一谈几个常见的处理目录的命令吧&#xff1a;cd&#xff1a;变换目录pwd&#xff1a;显示目前的目录mkdir&#xff1a;创建一个新的目录…

Get和Post请求和对应的参数获取

1.get和post的请求方式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>vue的异步请求</title><script src"js/vue.js"></script><!--vue单独抽取的插件--><sc…

阿里巴巴对Java编程【安全规约】的规约

转载自 阿里巴巴对Java编程【安全规约】的规约 安全规约 1. 【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。 说明&#xff1a;防止没有做水平权限校验就可随意访问、修改、删除别人的数据&#xff0c;比如查看他人的私信内容、修改他人的订单。 2. 【强制】用户敏…

JSON转换工具---jackson

1.json传递中和javaBean对象的关系 打印出来的字符串&#xff0c;对象和键值集合用{}, 数组和用[] 2.json的转换 总测试类:以下转换都为单元测试方法 public class ObjectMapperTest {private ObjectMapper mapper new ObjectMapper(); }<1>json和对象的转换 /*1.Use…

df、du和fdisk命令的区别

【1】df 列出文件系统的整体磁盘使用量由于 df 主要读取的数据几乎都是针对一整个文件系统&#xff0c;因此读取的范围主要是在 Superblock 内的信息&#xff0c; 所以这个命令显示结果的速度非常的快速&#xff01;&#xff08;1&#xff09;&#xff08;2&#xff09;补充&am…

阿里巴巴对Java编程【Mysql】的规约

转载自 阿里巴巴对Java编程【Mysql】的规约 建表规约 1. 【强制】表达是与否概念的字段&#xff0c;必须使用 is _ xxx 的方式命名&#xff0c;数据类型是 unsigned tinyint&#xff08; 1 表示是&#xff0c;0 表示否 &#xff09; 。 说明&#xff1a;任何字段如果为非负数&a…

applicationContext配置mybatis

1.引入外部的properties属性文件 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:context"http://w…

linux-basic(8)linux磁盘与文件系统管理

【8.1】认识EXT2文件系统【补充】硬盘与存储设备 https://blog.csdn.net/pacosonswjtu/article/details/79811762&#xff08;1&#xff09;实际的数据都是写在具有磁性物质的磁碟盘上头&#xff0c;而读写主要是透过在机械手臂上的读取头(head)来达成。 实际运作时&#xff0c…

阿里巴巴对Java编程【应用结构】的规约

转载自 阿里巴巴对Java编程【应用结构】的规约 应用分层 1. 【推荐】图中默认上层依赖于下层&#xff0c;箭头关系表示可直接依赖&#xff0c;如&#xff1a;开放接口层可以依赖于Web 层&#xff0c;也可以直接依赖于 Service 层&#xff0c;依此类推&#xff1a;  开放接口…

spring注解注入IOC

1.创建Bean对象的注解 <1>配置自定义Bean对象注解 Component、Controller、Service、repository 用法&#xff1a;写在类上&#xff0c; 例如&#xff1a;Service 或者 Service(“userService”) 作用&#xff1a;将该类交给Spring创建对象保存到Spring容器中&#xff…