Linux09 文件系统
Linux的文件系统
一、常用文件系统
| 常用文件系统 | ext4 | XFS | Btrfs | ZFS |
| 发行版 | Red Hat | openSUSE | FreeBSD | |
| ls /sbin/mk* | mkfs.ext4 | mkfs.xfs | mkfs.btrfs |
查看Linux 块设备和字符设备
ls -l /dev/sd? /dev/sr? /dev/hd? /dev/loop? /dev/null /dev/tty?
二、基本操作命令
df [选项]... [文件]... 命令用于显示磁盘分区上的可使用的磁盘空间。
-T: 显示文件系统的类型;
-t<文件系统类型>: 仅显示指定文件系统类型的磁盘信息;
-x<文件系统类型>: 不要显示指定文件系统类型的磁盘信息;
-i: 显示inode的信息;
du [选项]... [文件]... 命令是对文件和目录磁盘使用的空间的查看
-s 仅显示总计,只列出最后加总的值。
-h 以K,M,G为单位,提高信息的可读性。
dd [操作数] ... 命令用于复制文件并对原文件的内容进行转换和格式化处理。
if=file 从 file 中读而不是标准输入。
of=file 写到 file 里去而不是标准输出。除非指定 conv=notrunc,否则,dd 将把 file 截为0字节(或由 seek= 选项指定的大小)
ibs=bytes 一次读 bytes 字节。默认是512。
obs=bytes 一次写 bytes 字节。默认是512。
bs=bytes 一次读和写 bytes 字节。这将覆盖 ibs 和 obs 设定的值。
cbs=bytes 为 block 转换和 unblock 转换指定转换块的大小。
skip=blocks 在拷贝之前,跳过输入文件的前 blocks 块,每块大小为 ibs-byte 字节。
seek=blocks 在拷贝之前,跳过输出文件的前 blocks 块,每块大小为 obs-byte 字节。
count=blocks 只拷贝输入文件的前 blocks 块(每块的大小为 ibs-byte 字节),而不是全部内容,直到文件末尾。
fsck命令用于检查并且试图修复文件系统中的错误。
lsblk [选项] [<设备> ...]命令用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系。
-a 打印所有设备
-f 输出文件系统信息
-O 输出所有列
blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询。
三、分区工具
fdisk — Linux 自带的命令行分区工具。
cfdisk — 使用 ncurses 库编写的具有伪图形界面的命令行分区工具。
警告: cfdisk 创建的第一个分区起始位置是63扇区而不是通常的2048扇区。这将会在 SSD 和使用高级格式化(4k 扇区)的设备上造成性能问题。GRUB2 也会受影响。GRUB legacy 和 Syslinux不受影响。
gdisk — GPT 版的 fdisk。
sgdisk — Scriptable version of gdisk.
GNU parted — 命令行分区工具。
gparted — GTK 图形界面的分区工具。
partx, kpartx
1. fdisk
显示分区信息
fdisk -l
使用 fdisk 进行分区
p 显示现有分区
n 创建一个新分区
d 删除一个或多个分区。
t 设置分区类型。类型 82(Linux 交换分区),类型 b(FAT32)。
q 退出,不保存更改。
w 写入新的分区表并退出。
x 切换到专家模式,然后使用 f 子命令修复分区顺序
2. gdisk 分区GPT 磁盘 GUID Partition Table (GPT)
l 列出已知分区类型
d 删除一个分区
i 显示指定分区的细节
n 新增分区
o 新建空 GUID partition table (GPT)
p 输出分区信息
q 退出,不保存更改
v 检测磁盘
w 写入新的分区表并退出
x 切换到专家模式
3. parted
parted命令是磁盘分区和分区大小调整工具,它支持调整分区的大小。
4. mkfs 创建文件系统
使用 ls /sbin/mk* 命令显示所有 mkfs 命令。
所有 mkfs 命令都有几个公共选项。根据在 -type 选项中指定的文件系统类型,特定于正在创建的文件系统类型的选项将被传递到适当的创建命令。
5. mkswap建立交换分区,交换分区不能挂载。它们使用 swapon 命令启用,swapoff 卸载。
6. 使用 blkid 命令 (不需要 root 权限) 来查看分区的 设备名、UUID和标签、文件系统。
四、mount挂载文件系统
1. mount [-lhV]
mount -a [选项]
mount [选项] [--source] <源> | [--target] <目录>
mount [选项] <源> <目录>
mount <操作> <挂载点> [<目标>]
源可以是设备名、标签、UUID、或回环设备的常规文件
选项:
-a 挂载 fstab 中的所有文件系统
-T <路径> /etc/fstab 的替代文件
-n 不写 /etc/mtab
-o <列表> 主要用来描述设备或档案的挂接方式,以英文逗号分隔。常用的参数有:
loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset:指定访问文件系统所用字符集。 简体中文一般用cp936、gb2312或UTF-8。
username: 指定用户名
password: 指定密码
user /nouser: 允许/不允许一般用户挂载
codepage: 指定文件系统的代码页,简体中文中文代码是936
remount: 重载
-O <列表> 限制文件系统集合(和 -a 选项一起使用)
-r 以只读方式挂载文件系统(同 -o ro)
-w 以读写方式挂载文件系统(缺省选项)
-t <vfstype> 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。
常用类型有:
fat32文件系统:vfat
ntfs文件系统:ntfs
Windows网络共享文件:cifs (cifs是smbfs的升级版)
光盘或光盘镜像:udf, iso9660
UNIX(LINUX) 文件网络共享:nfs
2. umount [-hV]
umount -a [选项]
umount [选项] <源> | <目录>
-a 卸载所有文件系统
-A 卸载当前名字空间内指定设备对应的所有挂载点
-d 若挂载了回环设备,也释放该回环设备
-f 强制卸载(遇到不响应的 NFS 系统时)
-l 立即断开文件系统,清理以后执行
-R 递归卸载目录及其子对象
-r 若卸载失败,尝试以只读方式重新挂载
-t <列表> 限制文件系统集合
umount的时候如果显示 device busy,这是因为有程序正在访问这个设备,最简单的办法就是让访问该设备的程序退出以后再umount。
如果用户不急着umount,则可以用 umount -l /mnt/hda5 来卸载设备。选项 -l 并不是马上umount,而是在该目录空闲后再umount。
还可以先用命令 ps aux 来查看占用设备的程序PID。然后,用命令kill来杀死占用设备的进程,这样就umount的放心了。
卸载文件系统之前,应当确认没有进程正在该文件系统的文件上运行。使用 lsof 或 fuser 命令确定哪个文件是打开的,或哪个进程打开了文件。您可能需要 lsof 上的 -w 选项来避免与 Gnome Virtual File 系统(gvfs)相关的警告消息。
lsof -w 设备名|装载点
fuser -m 设备名|装载点
3. 例子
装载ntfs-3g
mount -t ntfs-3g /dev/sda1 /mnt/windows
对于 KDE >= 4.4,右击 Device Notifier applet 选择 Device Notifier Settings 然后在 Removable Devices 选择你的分区选择 Automount on login.
挂载本机的iso:
mount -o loop (-t iso9660) /home/sunky/mydisk.iso /mnt/cdrom
Windows 的C分区挂到Liunx的/mnt/winc目录下:
mount -t vfat /dev/hda1 /mnt/winc
如果中文显示有问题:
#mount -o iocharset=gb2312 /dev/hda1 /mnt/winc
如果这样做了以后还有问题,请尝试UTF-8编码:
# mount -o iocharset=utf8 /dev/hda1 /mnt/winc
设置mount挂载上去后,普通用户不可写
mount时加上 -o umask=000 即可
mount --bind olddir newdir 将一个目录中的内容挂载到另一个目录上
这个命令使得自己搭建的FTP要共享某个目录的时候变得特别方便。如果要取消mount用命令:
mount --move olddir newdir
如果mount --bind 也想写入fstab中的话格式如下:
olddir newdir none bind 0 0
4. 开机时自动挂载分区
每次挂载都要输入那么长的命令太繁琐了,只要将分区信息写到/etc/fstab文件中即可实现系统启动的自动挂载,例如对于/dev/hda5的自动挂载添加如下的行即可:
/dev/hda5 /mnt/hda5 vfat defaults,iocharset=cp936, rw 0 0
5. 网络文件共享系统(英语:Common Internet File System,缩写为CIFS),一种应用层网络传输协议,由微软开发,主要功能用是使网络上的机器能够共享计算机文件、打印机、串行端口和通讯等资源。CIFS消息一般使用NetBIOS或TCP协议传送,分别使用不同的端口139或445,目前倾向于使用445端口。CIFS的消息包括一个信头(32字节)和消息体(1个或多个,可变长)。
临时装载共享
mount //TANGO/GORDON /mnt
在实践中,这种用法存在一个问题:它将 root 作为用户名传递给服务器。如果服务器不允许 root 用户登录,那么装载尝试就会失败。您可以通过使用 -o user=name 选项将用户名传递给服务器,从而修正这个问题:
mount -o user=gordon //TANGO/GORDON /mnt
Password:
当您使用完共享后,您可以使用 umount 命令卸载它,就好像它是一个本地文件系统一样:
umount /mnt
永久装载共享
如果您希望在一台计算机上永久装载 SMB/CIFS 共享,您可以通过在 /etc/fstab 中添加一个条目来实现这一点。该进程与 mount 命令到 /etc/fstab 条目的任何其他转换的工作方式非常相近。然而,在这里需要特别注意 表 2 中的一个选项 credentials。由于大多数 SMB/CIFS 服务器都使用密码进行身份验证,如果您预计到要使用 /etc/fstab 来装载共享,则必须永久保存密码。使用 password 选项可以将密码直接存储在 /etc/fstab 中,但不建议采用这种做法;因为该计算机的所有用户都必须能够读取 /etc/fstab 文件,所有人都应该可以读取以这种方式存储的密码。使用 credentials 使您可以将密码存储在一个只有 root 用户可以读取的文件中,从而提高密码的安全性。
SMB/CIFS 共享的有效密码条目可能具有以下类似形式:
//TANGO/BACKUPS /saveit cifs credentials=/etc/samba/creds.txt 0 0
相关的凭据文件可能具有以下类似形式:
username=buuser
password=Iw2bUmS[t
注意:请务必赋予凭据文件适合的权限:一般是 0600 或 0400,以及 root 用户或者其凭据存储在该文件中的用户所拥有的所有权。
五、fstab
要配置成自动挂载可以在文件系统配置文件 /etc/fstab 中指定或者使用 udev 规则。
/etc/fstab 文件包含了如下字段,通过空格或 Tab 分隔:
<file system> <dir> <type> <options> <dump> <pass>
<file systems> - 要挂载的分区或存储设备。
<dir> - <file systems>的挂载位置。如果挂载的路径中有空格,可以使用 "\040" 转义字符来表示空格。
<type> - 要挂载设备或是分区的文件系统类型。 设置成auto类型,mount 命令会猜测使用的文件系统类型,对 CDROM 和 DVD 等移动设备是非常有用的。
<options> - 挂载时使用的参数,注意有些mount 参数是特定文件系统才有的。一些比较常用的参数有:
auto - 在启动时或键入了 mount -a 命令时自动挂载。
noauto - 只在你的命令下被挂载。
exec - 允许执行此分区的二进制文件。
noexec - 不允许执行此文件系统上的二进制文件。
ro - 以只读模式挂载文件系统。
rw - 以读写模式挂载文件系统。
user - 允许任意用户挂载此文件系统,若无显示定义,隐含启用 noexec, nosuid, nodev 参数。这对于移动媒介是特别有用的。
users - 允许所有 users 组中的用户挂载文件系统.
nouser - 只能被 root 挂载。
owner - 允许设备所有者挂载.
sync - I/O 同步进行。
async - I/O 异步进行。
dev - 解析文件系统上的块特殊设备。
nodev - 不解析文件系统上的块特殊设备。
suid - 允许 suid 操作和设定 sgid 位。这一参数通常用于一些特殊任务,使一般用户运行程序时临时提升权限。
uid 用户 id 号码。这允许指定用户具有完全的访问权限。
nosuid - 禁止 suid 操作和设定 sgid 位。
noatime - 不更新文件系统上 inode 访问记录,可以提升性能(参见 atime 参数)。
nodiratime - 不更新文件系统上的目录 inode 访问记录,可以提升性能(参见 atime 参数)。
relatime - 实时更新 inode access 记录。只有在记录中的访问时间早于当前访问才会被更新。(与 noatime 相似,但不会打断如 mutt 或其它程序探测文件在上次访问后是否被修改的进程。),可以提升性能(参见 atime 参数)。
flush - vfat 的选项,更频繁的刷新数据,复制对话框或进度条在全部数据都写入后才消失。
umask 是一个嵌入的 shell 命令,可以自动设置新创建的文件的权限。
fmask and dmask 与 umask 类似但是分别定义的是文件和目录的权限。
defaults - 使用文件系统的默认挂载参数,例如 ext4 的默认参数为:rw, suid, dev, exec, auto, nouser, async.
<dump> dump 工具通过它决定何时作备份. dump 会检查其内容,并用数字来决定是否对这个文件系统进行备份。 允许的数字是 0 和 1 。0 表示忽略, 1 则进行备份。大部分的用户是没有安装 dump 的 ,对他们而言 <dump> 应设为 0。
<pass> fsck 读取 <pass> 的数值来决定需要检查的文件系统的检查顺序。允许的数字是0, 1, 和2。 根目录应当获得最高的优先权 1, 其它所有需要被检查的设备设置为 2. 0 表示设备不会被 fsck 所检查。
在 /etc/fstab配置文件中你可以以三种不同的方法表示文件系统:内核名称、UUID 或者 label。使用 UUID 或是 label 的好处在于它们与磁盘顺序无关。
要显示分区的基本信息请运行:lsblk -f 或 blkid。
添加标签的方法:在 /etc/fstab 中使用 LABEL= 作为设备名的开头。添加 UUID 的方法:/etc/fstab 中使用 UUID= 前缀。
技巧:
挂载远程文件系统如果你仅想在需要的时候才挂载,可以添加 noauto,x-systemd.automount 参数。另外,可以设置 x-systemd.device-timeout=# 参数,设置超时时间,以防止网络资源不能访问的时候浪费时间。
如果你的加密文件系统需要密钥,则需要添加 noauto 参数到 /etc/crypttab 文件中的对应位置。systemd 开机的时候就不会打开这个加密设备,会一直等待到设备被访问时再使用密钥文件挂载。比如在使用加密RAID设备的时候可以节省一定的时间,因为 systemd 不必等到设备可用后才能访问。
外部设备在插入时挂载,在未插入时忽略。这需要 nofail 选项,可以在启动时若设备不存在直接忽略它而不报错。
对于允许 users 组访问:
/dev/<NTFS-part> /mnt/windows ntfs-3g gid=users,umask=0022 0 0
默认情况下,ntfs-3g 驱动只允许 root 用户写入。为了允许用户写入,使用 dmask 参数允许用户写入:
/dev/<NTFS-part> /mnt/windows ntfs-3g gid=users,fmask=113,dmask=002 0 0
如果你运行一个单用户机器,你也许想要自己拥有整个文件系统:
/dev/<NTFS-part> /mnt/windows ntfs-3g uid=USERNAME,gid=users 0 0
六、LVM
浙公网安备 33010602011771号