solaris的文件系统布局和linux相似,基本都符合FHS规范,但也有自己的不同部分。
1、 一些目录
/kernel 与 /platform 区别: /kernel 启动过程中独立于平台的可加载的核心模块
,/platform 顾名思义就是依赖于平台的可加载的核心模块目录。
/export、/export/home、/home区别: /export默认的公用文件系统的根目录,如/export/home、/export/install、jumpstart、flasharchive等的共享目录。 /export/home 独立文件系统挂载点,x86平台的默认用户home目录(创建用户时的默认home目录路径)。/home 用户家目录位置,独立的 文件系统挂载点(用户自定义的目录路径)。
比如你默认创建一个新用户,home目录在/export/home,那么当你用该用户登录时,会把/export/home挂接到/home下,如果用root登录,那么/home下什么也没有。
一些内存中的系统目录
/dev/fd 与系统当前正在使用的文件描述符关联的特殊文件。
/devices 物理设备主要目录
/etc/mnttab 当前挂载的文件系统
/etc/svc/volatile 和当前系统服务的状态关联的日志文件和参考文件
/proc 存放和进程相关的信息
/tmp
/var/run 各种系统和服务的锁文件、特殊文件、参考文件
设备目录解析
/dev/dsk 块设备文件link /dev/rdsk 裸磁盘设备link
/dev/fd 文件描述符
/dev/md 逻辑卷设备管理(LUN)
/dev/pts 伪终端设备
/dev/rmt 裸磁带设备
/dev/sound 声音设备和控制文件
/dev/term 串行设备
其它一些目录
/etc/default 存放不同程序的默认配置信息,如用户帐号的默认配置密码长度等。
/etc/skel 新用户帐号默认的shell初始化文件,比如在此目录下放置一个脚本文件,则会以用户权限去运行该脚本,类似于windows组策略的用户下开机脚本目录。
/etc/inet SMF授权的网络服务配置文件信息
/etc/svc 服务管理工具SMF的数据库和日志文件
/etc/zones zone的初始化文件和参考文件
/usr/dt CDE桌面环境目录和挂接点 /usr/include 头文件(#include)
/usr/kernel 独立于平台的可加载的核心模块,但在启动过程中不一定需要
/var/adm 日志文件(syslog、系统帐号等信息)
/var/crash 存放灾难存储文件
/var/svc SMF控制文件和日志
2、 文件和目录
solaris OS的文件和目录包括三个部分(其实unix/linux都如此):文件名、I-node、数据块。 文件名存放在目录中,目录以/根目录存放所有文件和子目录信息,即目录的数据块存储子目录、文件(即文件名)和Inode之间的链接。 inode记录两个部分信息:
inode记录文件的所有者、大小等信息(不记录文件名)和该文件的数据块的指针,inode本身是一个数字编号创建文件系统是就有一个固定大小数量的inode列表。 数据块存放文件的内容。
举例:查看cat /export/home/heliy.txt ,其过程如下:
设备文件:我个人的理解是提供到设备的访问连接,不存储数据,也不是驱动。如/devices下的设备文件。
我们常用的文件、目录、符号连接都使用数据块。至于软、硬连接,软连接没有占用空间(比如一个100M文件,它的软连接文件为1k,所以相对文件本身的大小没有占用,但信息的存储肯定会占用一定的空间),硬连接也没占用空间,只是两者的inode一样。大家仔细看下图就明白.
3、 文件系统
solaris默认支持的三类文件系统为:
磁盘文件系统ufs、zfs、hsfs(cd-rom的iso等文件)、udfs(dvd文件)、pcfs(fat32、fat16格式)
网络文件系统 nfs
伪文件系统 tmpfs、swapfs、procfs、mntfs、fdfs(文件描述符文件系统如/dev/fd/0) objfs(内核对象文件系统/system/object目录,内核使用该目录存放当前被内核加载的模块信息) devfs (设备文件系统如/devices)
从用户角度看文件系统:由文件和目录组成
从OS角度看文件系统:控制结构和数据块的结合,占用空间
那么一个solaris的磁盘文件系统如下:
VTOC磁盘卷标--》引导块bootblk--》ufs文件系统(主超级块(第一个柱组(备份超级块-->inode表-->数据块), 第二个柱组(备份超级块-->inode表-->数据块),...... ))
注:VTOC 第一个sector(如分区表等), 引导块bootblk,占用1~15间的15个sector,只有根文件系统有一个激活的引导块,每个文件系统的起始处都会为引导块分配空间。在UFS文件系统中,数据块为8kB(16个sector),另外数据块还以1kB为单位被划成碎片(fragment),solaris的ufs文件系统中,大于8KB的文件会以数据块存储,小于8KB文件以fragment碎片的方式存放,即数据块被分成每个1KB(1024kb)的碎片,比如file1 4KB,file2 3KB,则file1、file2会被存储在一个数据块中,剩余一个1kB碎片。如果file1 6KB ,file2 3KB,则不会将file1、file2存放在一个数据块中,而是file1一个数据块,file2另一个数据块。在创建UFS文件系统时,newfs命令默认会保留1%~10%的空间,通常叫minfree。
4、 修复文件系统
系统启动时,OS会根据配置是否需要对文件系统进行fsck扫描,一般不要对在线的文件系统运行fsck扫描,建议在单用户模式下操作。
fsck检测的内容:超级块的一致性、柱组块的一致性、inode的一致性、数据块的一致性。
fsck检测到有问题的文件和目录都放在/lost+found目录里
一般fsck在出现严重问题时会中断并要求root密码进入单用户模式。
fsck -F fstype(文件系统类型) -o b=备份超级块
-y 或Y 以回答yes的交互方式修复
-m 检测但不修复
如:fsck /dev/dsk/c0d0s0
如果无法修复
newfs -N /dev/dsk/c0d0s0 查看所以超级块
fsck -o b=33 /dev/dsk/c0d0s0