1、Linux分区

对于Linux来说无论有几个分区,分给哪一个目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。
Linux采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来,这时要载入的一个分区将使它的存储空间在一个目录下获得。

  • 硬盘说明
  1. Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
  2. 对于IDE硬盘,驱动器标识符为“hdx~”,其中“hd”表明分区所在的设备类型,这里是指IDE硬盘,“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“~”代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例:hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。
  3. 对于SCSI硬盘则标识为“sdx~”,SCSI硬盘是用“sd”来表示分区所在设备的类型,其余则和IDE硬盘的表示方法一样。
  • 查看所有设备挂载情况

命令:lsblk 或者lsblk -f

  • fdisk——磁盘分区工具,创建和维护分区表命令,受mbr分区表的限制,fdisk工具只能给小于2TB的磁盘划分分区:fdisk [必要参数][选择参数]

必要参数:
-l 列出素所有分区表
-u 与 -l 搭配使用,显示分区数目
选择参数:
-s<分区编号> 指定分区
-v 版本信息
菜单操作说明
m :显示菜单和帮助信息
a :活动分区标记/引导分区
d :删除分区
l :显示分区类型
n :新建分区
p :显示分区信息
q :退出不保存
t :设置分区号
v :进行分区检查
w :保存修改
x :扩展应用,高级功能

  • mkfs—— make filesystem的缩写;用来在特定的分区建立Linux文件系统 ;

image.png

磁盘情况查询

  • 查询系统整体磁盘使用情况:df -h
  • 查询指定目录的磁盘占用情况:du -h /目录

默认为当前目录;
-s:指定目录占用大小汇总
-h:带计量单位
-a:含文件
—max-deph=1:子目录深度
-c:列出明细的同时,增加汇总值

  • 磁盘情况——工作实用指令
  1. 统计/opt文件夹下文件的个数

ls -l /opt | grep “^-“ | wc -l

  1. 统计/opt文件夹下目录的个数

ls -l /opt | grep “^d” | wc -l

  1. 统计/opt文件夹下文件的个数,包括子文件夹里的

ls -lR /opt | grep “^-“ | wc -l

  1. 统计/opt文件夹下目录的个数,包括子文件夹里的

ls -lR /opt | grep “^d” | wc -l

  1. 以树状显示目录结构:tree 目录

注意,如果没有tree命令,则使用yum install tree安装(有网络的情况下)

2、挂载分区与卸载分区——mount与unmount

开机自动挂载

如果我们想实现开机自动挂载某设备,需要修改/etc/fstab文件。
文件挂载的配置文件:/etc/fstab
image.png
查看/etc/fstab文件可知,每行定义一个要挂载的文件系统;其每行的格式如下:

要挂载的设备或伪文件系统 挂载点 文件系统类型 挂载选项 转储频率 自检次序
UUID=6efb8a23-bae1-427c-ab10-3caca95250b1 /boot xfs defaults 0 0

要挂载的设备或伪文件系统:设备文件、LABEL(LABEL=””)、UUID(UUID=””)、伪文件系统名称(proc, sysfs)
挂载点:指定的文件夹
挂载选项:defaults
转储频率:0:不做备份;1:每天转储;2:每隔一天转储;
自检次序:0:不自检;1:首先自检;一般只有rootfs才用1;

/etc/fstab和/etc/mtab的区别

  1. /etc/fstab文件的作用:

记录了计算机上硬盘分区的相关信息,启动 Linux 的时候,检查分区的 fsck 命令,和挂载分区的 mount 命令,都需要 fstab 中的信息,来正确的检查和挂载硬盘。

  1. /etc/mtab文件的作用:

    先看它的英文是:
    This changes continuously as the file /proc/mount changes. In other words, when filesystems are mounted and unmounted, the change is immediately reflected in this file.
    记载的是现在系统已经装载的文件系统,包括操作系统建立的虚拟文件等;而/etc/fstab是系统准备装载的。 每当 mount 挂载分区、umount 卸载分区,都会动态更新 mtab,mtab 总是保持着当前系统中已挂载的分区信息,fdisk、df 这类程序,必须要读取 mtab 文件,才能获得当前系统中的分区挂载情况。当然我们自己还可以通过读取/proc/mount也可以来获取当前挂载信息。

    mount命令——挂载设备或分区

    mount [-参数] [设备名称] [挂载点]
    其中常用的参数有:
    -V:显示程序版本
    -h:显示辅助信息
    -v: 详细显示安装信息,通常和 -f 用来除错。
    -a:将 /etc/fstab 中定义的所有文件系统挂上。
    -F:这个命令通常和 -a 一起使用,它会为每一个 mount 的动作产生一个行程负责执行。在系统需要挂上大量 NFS 文件系统时可以加快挂上的动作。
    -f:通常用在排错的用途。它会使 mount 并不执行实际挂上的动作,而是模拟整个挂上的过程。通常会和 -v 一起使用。
    -n:一般而言,mount 在挂上后会在 /etc/mtab 中写入一些资料。但在系统中没有可写入文件系统存在的情况下可以用这个选项取消这个动作。
    -s-r:等于 -o ro
    -w:等于 -o rw
    -L:将含有特定标签的硬盘分割挂上。
    -t:指定文件系统的型态,通常不必指定。mount 会自动选择正确的型态。
    -o async:打开非同步模式,所有的文件读写动作都会用非同步模式执行。
    -o sync:在同步模式下执行。
    -o atime、-o noatime:当 atime 打开时,系统会在每次读取文件时更新文件的『上一次调用时间』。当我们使用 flash 文件系统时可能会选项把这个选项关闭以减少写入的次数。
    -o auto、-o noauto:打开/关闭自动挂上模式。
    -o defaults:使用预设的选项 rw, suid, dev, exec, auto, nouser, and async.
    -o dev、-o nodev-o exec、-o noexec允许执行文件被执行。
    -o suid、-o nosuid:允许执行文件在 root 权限下执行。
    -o user、-o nouser:使用者可以执行 mount/umount 的动作。
    -o remount:将一个已经挂下的文件系统重新用不同的方式挂上。例如原先是只读的系统,现在用可读写的模式重新挂上。
    -o ro:用只读模式挂上。
    -o rw:用可读写模式挂上。
    -o loop=:使用 loop 模式用来将一个文件当成硬盘分割挂上系统。
    需要注意的是,挂载点必须是一个已经存在的目录,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用,umount以后会恢复正常。使用多个-o参数的时候,-o 只用一次,参数之间用半角逗号隔开,例如:# mount –o remount,rw /
    案例:
    要挂载windows下文件系统为FAT32的D盘,一般而言在Linux下这个分区对应/dev/hda5,根据具体的分区情况会有不同,这里就以hda5来举例说明:
    # mkdir /mnt/hda5 //创建hda5的目录作为挂载点,位置和目录名可自定义
    # mount -t vfat /dev/hda5 /mnt/hda5
    一般而言,Linux会自动探测分区的文件系统,除非让你指定时,否则-t vfat 可以省掉。
    # mount /dev/hda5 /mnt/hda5
    这样就可以进入/mnt/hda5目录去访问分区中的资源了。

    常见问题

  2. 为什么mount上分区后显示不了中文,文件为问号/乱码?

显示问号表明你的系统中没有可识别使用的中文字体,请先安装中文字体。确保你的系统已经可以很好的显示中文。显示为乱码一般是mount默认使用的文件系统编码和文件系统中文件的实际编码不一致造成的。要想正常显示中文文件,mount时需要用到 -o 参数里的codepage和iocharset选项。codepage指定文件系统的代码页,简体中文中文代码是936;iocharset指定字符集,简体中文一般用cp936或gb2312。
例如:
# mount –o iocharset=gb2312 codepage=936 /dev/hda5 /mnt/hda5
一般来说 mount –o iocharset=cp936 /dev/hda5 /mnt/hda5 就可以解决问题了。
如果这样做了以后还有问题,请尝试UTF-8编码:
# mount –o iocharset=utf8 /dev/hda5 /mnt/hda5

  1. 为什么mount上去以后分区普通用户不可写?

mount时加上 –o umask=000 即可:
# mount –o umask=000, iocharset=cp936 /dev/hda5 /mnt/hda5

  1. 为什么mount上去后的分区中的文件都变成短文件名了?

这是文件系统挂错的原因,将FAT32挂载成FAT16时就会出现这种情况,先umount,然后用 –t vfat 重新挂载即可解决问题。
# mount –t vat /dev/hda5 /mnt/hda5

  1. 为什么不能mount ntfs分区?

这是内核不支持NTFS文件系统的原因,请重新编译内核或者安装内核的NTFS文件系统支持包,以使得内核有NTFS文件系统的支持。

  1. 如何挂载U盘和mp3?

    如果计算机没有其它SCSI设备和usb外设的情况下,插入的U盘的设备路径是 /dev/sda1,用命令:
    # mkdir /mnt/u
    # mount /dev/sda1 /mnt/u
    挂载即可。

  2. 可以直接使用iso文件吗?

可以,就是mount的这一选项使得Linux下有免费虚拟光驱的说法,具体用法是:
# mkdir /mnt/iso
# mount –o loop linux.iso /mnt/iso
当然,挂载以后挂载点/mnt/iso也是只读的。

  1. 我怎么不可以mount iso文件?

一般而言,大多数的发行版使用的内核均已将loop设备的支持编译进去了,但是也有没有的情况,所以请确保系统所使用的内核支持loop设备。
第二种情况是iso文件被放置到了NTFS或其它只读文件系统中了。挂载loop 设备必须要求挂载到一个可写的分区中,目前Linux内核对NTFS文件系统的写支持非常有限,请将iso文件复制到其它可写文件系统中后再挂载。

  1. 如何挂载光驱和软驱?

一般来说CDROM的设备文件是/dev/hdc,软驱的设备名是/dev/fd0
# mkdir /mnt/cdrom
# mount /dev/hdc /mnt/cdrom //挂载光驱 //
# mkdir /mnt/floppy
# mount /dev/fd0 /mnt/floppy //挂载软驱 //

  1. 为何挂载的CD-ROM不能显示中文文件?

使用 –o iocharset=cp936 选项一般能解决问题,否则使用utf-8编码。
# mount –o iocharset=cp936 /dev/hdc /mnt/cdrom

  1. 如何开机自动挂载分区?

每次挂载都要输入那么长的命令的确是繁琐了些,只要将分区信息写到/etc/fstab文件中即可实现系统启动的自动挂载,例如对于/dev/hda5的自动挂载添加如下的行即可:
/dev/hda5 /mnt/hda5 vfat defaults,iocharset=cp936, rw 0 0

  1. 如何挂载samba 分区?

mkdir /mnt/share
# mount -t smbfs -o username=root,password=abc,codepage=936,iocharset=gb2312//192.168.1.100/share /mnt/share
如果中文显示不正常请尝试UTF-8编码。当然可以写到fstab中实现自动挂载。

  1. mount —bind是什么意思?

mount —bind 是将一个目录中的内容挂载到另一个目录上,用法是:
# mount —bind olddir newdir
这个命令使得自己搭建的FTP要共享某个目录的时候变得特别方便。如果要取消mount用命令:
# mount —move olddir newdir 即可。
如果mount —bind 也想写入fstab中的话格式如下:
olddir newdir none bind 0 0

  1. umount基本用法是?

例如 /dev/hda5 已经挂载在/mnt/hda5上,用一下三条命令均可卸载挂载的文件系统:
# umount /dev/hda5
# umount /mnt/hda5
# umount /dev/hda5 /mnt/hda5

  1. 为什么umount的时候老显示 device busy?

这是因为有程序正在访问这个设备,最简单的办法就是让访问该设备的程序退出以后再umount。可能有时候用户搞不清除究竟是什么程序在访问设备,如果用户不急着umount,则可以用:
# umount -l /mnt/hda5
来卸载设备。选项 –l 并不是马上umount,而是在该目录空闲后再umount。还可以先用命令 ps aux 来查看占用设备的程序PID,然后用命令kill来杀死占用设备的进程,这样就umount的非常放心了。
方法一:
fuser -m -v /nfs_old/
用户 进程号 权限 命令
root 2699 ..c.. bash
root 2999 ..c.. su
如上所示,有两个进程占用了,将其kill掉,再重新取消挂载。
kill -9 2699 2999
umount /nfs_old/
方法二:
umount -l /nfs_old/
方法三:
fuser -km /nfs_old/