My Solaris 10 System Administration Part I notes.
Credits
My main source of information came from Oracle System Administration of Solaris 10 Part I from Oracle University (excellent training) & Solaris 10 man pages.
Solaris 10 OS Directory Hierarchy
File systems
Unix File System (UFS) is the default file system
Directory starts with root directory (/)
Solaris 10 OS includes alternate file system called zettabyte file system (ZFS)
Logically all directories fall below root directory (/)
Physically directories can be located on one or spread over multiple file systems
<insert graphics to show this>
Refer to filesystem man page for more information on file system organization.
$ man -s 5 filesystem
Important directories
/ root of file system
/bin symbolic link to /usr/bin & location for binary files of standard system commands
/dev primary directory for logical device names & contents of directory are symbolic links to device files in /devices directory
/etc directory holds host-specific config files & databases for system administration
/export default directory for commonly shared file systems (like user home directories)
/home default directory or mount point for user home directories
Important in-memory system directories
/tmp directory for temporary files (cleared during boot sequence)
Subdirectories of note under /dev
/dev/dsk block disk devices
/dev/fd file descriptors
/dev/md logical volume management metadisk drives
/dev/pts pseudo terminal devices
/dev/rdsk raw disk devices
/dev/rmt raw magnetic devices
/dev/term serial devices
Important subdirectories under /etc
/etc/acct config info for accounting system<
/etc/cron.d config info for cron utility
/etc/default default info for various programs
/etc/inet config files for network services
/etc/init.d scripts for starting & stopping services
/etc/lp config info for printer subsystem
/etc/mail config info for mail subsystem
/etc/nfs config file for NFS server logging
/etc/opt< config info for optional packages
/etc/rc#.d legacy scripts that are executed when entering or leaving a specific run level
/etc/security controls files for Role Based Access Control & security privileges
/etc/skel default shell initialization files for new users
/etc/svc Service Management Facility database & log files
Important subdirectories of /usr
/usr/bin standard system commands
/usr/ccs C-compilation programs & libraries
/usr/demo demo programs & data
/usr/dt Java Desktop System (JDS) software directory or mount point
/usr/include Header files
/usr/jdk directory contains Java technology programs & libraries
/usr/kernel loadable kernel modules not generally required during boot process
/usr/lib architecture-dependent databases, libraries, & binaries that are not invoked directly by user
/usr/opt config info for optional packages
/usr/sbin sys admin coomands
/usr/spool symbolic link to /var/spool directory
Important subdirectories of /var
/var/adm log files for syslog, system accounting, etc
/var/crash crash dump storage
/var/spool spool files storage /var/svc Service Management Facility control files and logs /var/tmp long term storage of temp files (survives reboot)
File components
Generally a file name is associated with an inode & an inode provides access to data blocks.
<insert figure of relationship>
file names
File names are objects frequently used to manage files. A file must have a name that is associated with an inode.
inodes
Inodes are objects that Solaris OS uses to maintain info about a file. In general an inode contains:
- file info = file owner, permissions, & size
- pointers to data blocks associated with file content
inodes are numbered & each file system contains its own inode list
At UFS creation a new inode list is created
data blocks
data blocks are units of disk space that store data
Regular files, directories, & symbolic links make use of data blocks
Device files do not hold data therefore do not use data blocks
ZFS uses the following data structures: dnode data structure: the data structure contains pointers to data blocks znode data structure: this data structure contains info about file (owner, permissions, & size)
Dnode & znode data structures are called metadata & stored dynamically by ZFS. ZFS implements ZFS POSIX layer (ZPL) which is a primary interface for ZFS. ZPL allows commands you use with UFS to work with ZFS. ZFS emulates UFS inode number mechanism
Identifying file types
Solaris has four main file types:
regular or ordinary files store one or more types of data
directories store one or more types of data
symbolic links store one or more types of data
device files does not store data
Use ls command with -l option to distinguish different file types
The first character of each line indicates file type
<insert image of ls -l output with dictionary>
regular files
d directories
l symbolic links
b block-special device files
c character-special device files
Examples on v240:
- cd /etc - ls -l total 650 lrwxrwxrwx 1 root root 14 May 3 15:34 TIMEZONE -> ./default/init drwxr-xr-x 6 root other 512 May 3 16:15 X11 drwxr-xr-x 2 adm adm 512 May 3 16:19 acct -rw-r--r-- 1 root sys 253 Aug 6 2010 aggregation.conf lrwxrwxrwx 1 root root 14 May 3 16:03 aliases -> ./mail/aliases drwxr-xr-x 7 root bin 512 May 3 16:11 apache drwxr-xr-x 2 root bin 512 May 3 15:54 apache2 * output truncated*****
- pwd /devices/pci@1c,600000/scsi@2 - ls -l total 8 drwxr-xr-x 2 root sys 512 May 3 16:25 sd@0,0 brw-r----- 1 root sys 32, 0 Jul 7 13:54 sd@0,0:a crw-r----- 1 root sys 32, 0 Jul 14 16:50 sd@0,0:a,raw
directories
directories only store information on file name to inode number relationships
A directory contains data for files that are logically located within directory
Regular files
Most common file types found in Solaris are regular files. Regular files can store different types of data including ASCII text or binary data.
Symbolic links
a symbolic link is a file that points to another file & contain only one type of data
a symbolic link contains the path name of the file to which it points & the file can be located on other file systems
the size of a symbolic link always matches the number of characters in the path name it contains
Example:
after the '→' there are 19 characters & the 19 before May is the file size.
- ls -l /etc/prtvtoc lrwxrwxrwx 1 root root 19 May 3 15:34 prtvtoc -> ../usr/sbin/prtvtoc
symbolic links can point to regular files, directories, other symbolic links, & device files.
symbolic links can be absolute or relative path names
ln command
ln command with -s option creates a symbolic link
<insert example of creating symbolic link>
<insert picture of relationship between link & file>
device files
device file provides access to a device
When using long listing on file the size field is populated by two numbers separated by comma
The two numbers are called major & minor device numbers
major device # identifies the specific device driver required to access device minor device # identifies specific unit of the type that the device driver controls
Long listing:
bash-3.00$ ls -l | grep pci drwxr-xr-x 4 root sys 512 May 3 16:25 pci@1c,600000 crw------- 1 root sys 109, 767 Jul 14 16:50 pci@1c,600000:devctl crw------- 1 root sys 109, 764 Jul 14 16:50 pci@1c,600000:intr crw------- 1 root sys 109, 765 Jul 14 16:50 pci@1c,600000:reg drwxr-xr-x 5 root sys 512 May 3 16:25 pci@1d,700000 crw------- 1 root sys 109, 1023 Jul 14 16:50 pci@1d,700000:devctl crw------- 1 root sys 109, 1020 Jul 14 16:50 pci@1d,700000:intr crw------- 1 root sys 109, 1021 Jul 14 16:50 pci@1d,700000:reg drwxr-xr-x 6 root sys 512 May 3 16:25 pci@1e,600000 crw------- 1 root sys 109, 511 Jul 14 16:50 pci@1e,600000:devctl crw------- 1 root sys 109, 508 Jul 14 16:50 pci@1e,600000:intr crw------- 1 root sys 109, 509 Jul 14 16:50 pci@1e,600000:reg drwxr-xr-x 4 root sys 512 May 3 16:25 pci@1f,700000 crw------- 1 root sys 109, 255 Jul 14 16:50 pci@1f,700000:devctl crw------- 1 root sys 109, 252 Jul 14 16:50 pci@1f,700000:intr crw------- 1 root sys 109, 253 Jul 14 16:50 pci@1f,700000:reg
File pci@1c,600000:devctl refers to major device # 109 & minor device # 767
You can also use the
filecommand:
bash-3.00$ file pci@1c,600000:devctl pci@1c,600000:devctl: character special (109/767)
Use
devfsadmcommand to create new device files
A relationship exists between device file & device it controls. Major & minor device #s contained in inode establish relationship
<image showing relationship from above example>
Verify device driver is available as kernel module:
bash-3.00# modinfo -w | grep -w scsi 22 1313a40 122a8 - 1 scsi (SCSI Bus Utility Routines) bash-3.00# modinfo -c | grep -w scsi 22 1 scsi LOADED/INSTALLED bash-3.00# modinfo -w | grep -w iscsi 96 7b600000 328c8 279 1 iscsi (Sun iSCSI Initiator v20100714-0) bash-3.00# modinfo -c | grep -w iscsi 96 1 iscsi LOADED/INSTALLED
device files are categorized as character-special or raw devices or block-special devices devices
device files in each category interact with devices differently
character-special device files
File type of «c» is character-special device file & data is accessed as a data stream
crw------- 1 root sys 109, 767 Jul 14 16:50 pci@1c,600000:devctl
Result of
filecommand:
bash-3.00# file pci@1c,600000:devctl pci@1c,600000:devctl: character special (109/767)
block-special device files
File type of «b» is a block-special device file & for disk devices, block-special device files call for I/O operations based on a defined block size
Block size depends on particular device file
<example of long listing of block file>
data transferred between process & block-special device is first stored in kernel-managed memory-based cache
block devices allow random seeks to be performed devices do not
hard links
hard link is association between file name & an inode
inode keeps count # of file names associated with it (hard links)
output of long listing will show link count or total # of hard links to a file
bash-3.00# ls -l mnttab -r--r--r-- 5 root root 1539 Jul 7 13:55 mnttab
/etc/mnttab file has 5 link counts or hard links file permissions & owner
creating new hard links
lncommand creates new hard links to regular files
$ ln file5 file6 $ ln file5 file7 $ ln file7 file8 $ ls -il total 64868 54 -rw------- 1 paul labnet 555969 May 6 13:52 file.7z 55 -rw-r--r-- 1 paul labnet 53 May 6 13:23 file1.gz 39 -rw-r--r-- 1 paul labnet 739704 May 6 13:42 file2.gz 41 -rw-r--r-- 1 paul labnet 0 May 5 12:35 file3 50 -rw-r--r-- 1 paul labnet 3976616 May 6 13:37 file4 52 -rw-r--r-- 4 paul labnet 3976541 May 6 13:43 file5 52 -rw-r--r-- 4 paul labnet 3976541 May 6 13:43 file6 52 -rw-r--r-- 4 paul labnet 3976541 May 6 13:43 file7 52 -rw-r--r-- 4 paul labnet 3976541 May 6 13:43 file8 53 -rw-r--r-- 1 paul labnet 11934208 May 6 13:48 filetar.tar 42 drwxr-xr-x 2 paul labnet 512 May 5 12:45 subdir1 $
The
lncommand created files 6-8. Now files 5-8 refer to same inode 52. Notice link count is now 4 for each of the files. You must use -i option with
lscommand to view inodes
Use find command with -inum option to find files with same inode
$ find . -inum 52 ./file6 ./file7 ./file5 ./file8
<insert image showing file name to inode association>
deleting hard links
delete files normally & link count will decrease automatically
$ rm file8 $ ls -li total 57076 54 -rw------- 1 paul labnet 555969 May 6 13:52 file.7z 55 -rw-r--r-- 1 paul labnet 53 May 6 13:23 file1.gz 39 -rw-r--r-- 1 paul labnet 739704 May 6 13:42 file2.gz 41 -rw-r--r-- 1 paul labnet 0 May 5 12:35 file3 50 -rw-r--r-- 1 paul labnet 3976616 May 6 13:37 file4 52 -rw-r--r-- 3 paul labnet 3976541 May 6 13:43 file5 52 -rw-r--r-- 3 paul labnet 3976541 May 6 13:43 file6 52 -rw-r--r-- 3 paul labnet 3976541 May 6 13:43 file7 53 -rw-r--r-- 1 paul labnet 11934208 May 6 13:48 filetar.tar 42 drwxr-xr-x 2 paul labnet 512 May 5 12:45 subdir1 $
Once all files with same inode are deleted the inode will be deleted
Examples
Find files that match inode on same file system
# ls -l /etc/init.d/apache -rwxr--r-- 6 root sys 2452 Jun 23 2010 /etc/init.d/apache
/etc/init.d/apache file has a 6 link count
# ls -i /etc/init.d/apache 2955 /etc/init.d/apache
/etc/init.d/apache inode is 2955
# find /etc -inum 2955 -exec ls -i {} \; 2955 /etc/init.d/apache 2955 /etc/rc0.d/K16apache 2955 /etc/rc1.d/K16apache 2955 /etc/rc2.d/K16apache 2955 /etc/rc3.d/S50apache 2955 /etc/rcS.d/K16apache
The
findcommand with -inum option allows you to search by inode. Now I know which files are pointing to same location as /etc/init.d/apache
Local disk devices
disk device has physical & logical components
Physical disk components
See other sites for more details on physical disk components.
components include spindle, platters, heads, head actuator arm
Logical disk components
sector - smallest addressable unit on a platter, one sector can hold 512 bytes of data
track - series of sectors positioned end-to-end in a circular path, # of sectors per track varies due to size of tracks
cylinder - a stack of concentric tracks
<insert pic>
a disk platter component is divided into sectors, tracks, & cylinders components
disks present a fixed number of sectors per track to the Solaris OS even though # of sectors is different per track
Disk labels & partition tables
disk slices are groups of cylinders used to organize data
typically, administrators will use slices to organize data by function so a slice may store user's home directories, binaries, swap space, or system files
a beginning & ending cylinder define each slice
- of cylinders determines the size of a slice
A disk label is a defined area of disk space used to store information about disk controller, geometry, & slices
A disk label also contains a partition table which holds partition, cylinder, & slice information
Label a disk = write slice info to disk a disk after changes are made
Solaris 10 supports two disk labels
- Sun Microsystems, Inc (SMI) disk label
- SPARC-based Solaris OS
- SPARC volume table of contents (VTOC) label for disks (SMI VTOC)
- supports disks <1 terabyte in size
- resides in 1st sector of disk on SPARC
- includes partition table which enables you to define 0-7 disk partitions (slices)
- slice 2 represents entire disk
- slice 2 maintains important data regarding entire disk, like total # cylinders, size of total disk
- Must be used for SPARC-based & Solaris x86/x64-based systems boot disks
- Solaris x86/x64-based systems maintain two partition tables on each disk
- 1st sector contains a fixed disk (fdisk) partition table
- 2nd sector contains partition table with slice info within Solaris fdisk partition
- fdisk partition defines up to four fdisk partitions
- extensible firmware interface (EFI) disk label
- supports disks >1 terabyte in size on 64-bit kernel
- supports virtual disk volumes
- partition table defines 0-9 disk partitions (slices)
- compatible with UFS & can create UFS >1 terabyte
- Solaris OS systems do not currently boot from disks using EFI labels
<insert some pics of physical disks>
X86/x64 partitions & slices
recommended that you use fdisk menu & format utility to create or modify fdisk partition table
2nd sector of Solaris fdisk partition contains a partition table that defines slices within Solaris fdisk partition, the label that contains this partition table is known as x84/x64 VTOC
using format utility Solaris fdisk partition can be divided into ten slices 0-9. Slices 0-7 are used for the same purposes as SPARC SMI labels. Slice 2 represents entire disk drive. Slice 8 & 9 are used for purposes relating to x86/x64 hardware
format utility automatically creates slice 8 & 9 when x86/x64 VTOC is defined within Solaris fdisk partition. slice 8 is always required, slice 9 exists, unassigned, on SCSI or Fibre-Channel disks. format utility prevents modifying slices 8 & 9
Solaris OS systems on x86/x64 platforms create device files to support 16 slices for each disk 0-15. format utility limits to slices 0-7. Solaris x86/x64 systems also create device files that represent four possible fdisk partitions
slice 8 is boot slice by default & contains GRUB stage1 program in sector 0, the Solaris disk label & VTOC in sectors 1 & 2, & GRUB stage2 program beginning at sector 50. Slice 8 occupies the 1st cylinder 0 of Solaris fdisk partition
IDE/SATA disk drives slice 9 is tagged alternates slice. If slice 9 is defined it occupies 2nd & 3rd cylinder 1-2 of Solaris fdisk partition & contains blocks used to store bad block info
Disk naming conventions
disk device names identify a series of components that together specify a particular disk device
<insert image of naming convention>
Disk device name format: controller, target, disk (or LUN), fdisk partition, & slice that a particular disk device uses
disk device names represent full name of a slice or fdisk partition
Controller #: identifies host bus adapter (HBA), HBA controls command & data communication between system & disk unit, <-HBA-> disk unit, #s are assigned sequentially
Target #: identifies a unique hardware address assigned to SCSI target controller of a disk, tape, or optical drive. IDE & SATA drives typically do not use target #s (some do), Fibre-Channel attached disks may use World Wide Name (WWN) instead of a target #
Disk #: unique identifier for each disk per controller # & target # pair. also known as logical unit number (LUN)
fdisk partition #: number ranging from p0 to p4, number p0 represents whole physical disk, device names that include p# are only found on x86/x64 systems
slice #: a # ranging from s0-s7 on SPARC systems & s0-s15 on x86/x64 systems
SCSI disk device names
SCSI specification allows multiple disks to one target controller
- In some cases, SCSI disk & target controller are combined into one physical unit
- also known as embedded SCSI configuration
- disk # is always set to d0 with embedded SCSI disks
<insert pic of embedded SCSI & regular configurations>
iSCSI disk devices
Solaris 10 8/07 release included support for iSCSI target devices
The targets can be disk or tape
systems with dedicated arrays can now export replicated storage with ZFS or UFS
use
iscsitadmcommand to set up & manage iSCSI target devices
use
iscsiadmcommand to identify iSCSI targets, which will discover & use iSCSI target devices
IDE & SATA disk device names
IDE & SATA disks do not use target controllers
device names for IDE & SATA disks have controller #, disk #, & slice (fdisk partition) #
Example: c#d#s#
<insert image showing overview>
Ultra 10 systems are different & use a target # to represent identify of disks on primary & secondary IDE buses
- t0 = master device on primary IDE bus
- t1 = slave device on primary IDE bus
- t2 = master device on secondary IDE bus
- t3 = slave device on secondary IDE bus
<insert image example>
Solaris OS device naming conventions
Solaris OS uses three different types of names depending on how the device is being referenced
- logical device names
- physical device names
- instance names
logical device names
logical device names are symbolic links to physical device names in /devices directory
logical devices are primarily used when entering commands on command line
all logical device names are in /dev directory
logical device names contain controller #, target # (if required), disk #, & or fdisk partition #
every disk has entries in /dev/dsk & /dev/rdsk directories
/dev/dsk is for block disk devices
/dev/rdsk is for character disk devices
physical device names
uniquely identifies physical location of hardware devices on system
physical device names are located in /devices directory
physical device name contains hardware information, separated by slashes, that represent the path through the system's physical device tree to the device
symbolic links in /dev/dsk & /dev/rdsk point to physical device files, use ls -l
use ls -lL
The use of
lscommand with -L option will, if file is a symbolic link, evaluate the file info & file type of the file or directory that the symbolic link references, rather than those of the link itself. However, the name of the link is displayed, rather than the referenced file or directory.
Example:
# ls -l /dev/dsk/c1t1d0s0 lrwxrwxrwx 1 root root 43 May 3 16:19 /dev/dsk/c1t1d0s0 -> ../../devices/pci@1c,600000/scsi@2/sd@1,0:a - ls -lL /dev/dsk/c1t1d0s0 brw-r----- 1 root sys 32, 8 Jul 14 16:50 /dev/dsk/c1t1d0s0
<insert pic of sample device tree>
Two categories of device trees include devices recognized by hardware at boot time & known by Solaris OS kernel managed by software controls available to Solaris OS. If no device file exists for a powered-on & connected physical device then Solaris OS kernel doesn't recognize the device in its device tree Top directory in hierarchy is called root node of the device tree. The bus nexus nodes & leaf nodes below root object have device drivers associated to them A device driver is software that communicates with physical device & device driver must be available to Solaris OS kernel so system can use device During system initialization the Solaris OS kernel identifies physical location of a device. The kernel relates a node with an address [[nodename@address which is the physical device name
<insert pic of example>
instance names
instance names are shortened names for a physical device
instance names are abbreviated names assigned by the Solaris OS kernel for each system device
instance names are usually used to display on console or in /var/adm/messages log file
Example instance names:
- sd# = SCSI disk name & # is the number, such that sd1 would be 2nd SCSI disk device
- cmdk# = common disk driver is the disk name & # is the number, such that cmdk0 would be first SATA disk device
- dad# = direct access device name & # is the number, such that dad1 would be 2nd IDE disk device
- ata# = Advanced Technology Attachment (ATA) is disk name & # is the number, such that ata0 would be first
- qfe# = quad fast ethernet & # is the number, such that qfe2 is 3rd interface on quad fast ethernet device
Listing device names
Some ways in Solaris OS to list system devices:
- /etc/path_to_inst file
- prtconf command
- format utility
/etc/path_to_inst file
Solaris system maps physical name ↔ instance name in /etc/path_to_inst file
Solaris kernel uses the names in file to identify every possible device
- file is read only at boot time
- maintained by kernel
Example file from v240:
# cat /etc/path_to_inst - - Caution! This file contains critical kernel state - "/iscsi" 0 "iscsi" "/pseudo" 0 "pseudo" "/scsi_vhci" 0 "scsi_vhci" "/options" 0 "options" "/ramdisk-root" 0 "ramdisk" "/pci@1f,700000" 0 "pcisch" "/pci@1f,700000/network@2" 0 "bge" "/pci@1f,700000/network@2,1" 1 "bge" "/pci@1e,600000" 1 "pcisch" "/pci@1e,600000/isa@7" 0 "ebus" "/pci@1e,600000/isa@7/power@0,800" 0 "power" "/pci@1e,600000/isa@7/rmc-comm@0,3e8" 0 "rmc_comm" "/pci@1e,600000/isa@7/i2c@0,320" 0 "pcf8584" "/pci@1e,600000/isa@7/i2c@0,320/motherboard-fru-prom@0,a2" 0 "seeprom" "/pci@1e,600000/isa@7/i2c@0,320/chassis-fru-prom@0,a8" 1 "seeprom" "/pci@1e,600000/isa@7/i2c@0,320/power-supply-fru-prom@0,b0" 2 "seeprom" "/pci@1e,600000/isa@7/i2c@0,320/power-supply-fru-prom@0,a4" 3 "seeprom" "/pci@1e,600000/isa@7/i2c@0,320/dimm-spd@0,b6" 4 "seeprom" "/pci@1e,600000/isa@7/i2c@0,320/dimm-spd@0,b8" 5 "seeprom" "/pci@1e,600000/isa@7/i2c@0,320/dimm-spd@0,ba" 6 "seeprom" "/pci@1e,600000/isa@7/i2c@0,320/dimm-spd@0,bc" 7 "seeprom" "/pci@1e,600000/isa@7/i2c@0,320/dimm-spd@0,c6" 8 "seeprom" "/pci@1e,600000/isa@7/i2c@0,320/dimm-spd@0,c8" 9 "seeprom" "/pci@1e,600000/isa@7/i2c@0,320/dimm-spd@0,ca" 10 "seeprom" "/pci@1e,600000/isa@7/i2c@0,320/dimm-spd@0,cc" 11 "seeprom" "/pci@1e,600000/isa@7/i2c@0,320/nvram@0,50" 12 "seeprom" "/pci@1e,600000/isa@7/i2c@0,320/gpio@0,44" 0 "pca9556" "/pci@1e,600000/isa@7/i2c@0,320/gpio@0,46" 1 "pca9556" "/pci@1e,600000/isa@7/i2c@0,320/gpio@0,4a" 2 "pca9556" "/pci@1e,600000/isa@7/i2c@0,320/gpio@0,68" 3 "pca9556" "/pci@1e,600000/isa@7/i2c@0,320/gpio@0,88" 4 "pca9556" "/pci@1e,600000/isa@7/i2c@0,320/gpio@0,70" 5 "pca9556" "/pci@1e,600000/isa@7/serial@0,3f8" 0 "su" "/pci@1e,600000/isa@7/serial@0,2e8" 1 "su" "/pci@1e,600000/pmu@6" 0 "pmubus" "/pci@1e,600000/pmu@6/gpio@80000000" 0 "pmugpio" "/pci@1e,600000/pmu@6/i2c@0,0" 0 "smbus" "/pci@1e,600000/usb@a" 0 "ohci" "/pci@1e,600000/ide@d" 0 "uata" "/pci@1e,600000/ide@d/sd@0,0" 3 "sd" "/memory-controller@0,0" 0 "mc-us3i" "/memory-controller@1,0" 1 "mc-us3i" "/pci@1c,600000" 2 "pcisch" "/pci@1c,600000/scsi@2" 0 "glm" "/pci@1c,600000/scsi@2/sd@0,0" 0 "sd" "/pci@1c,600000/scsi@2/sd@1,0" 1 "sd" "/pci@1c,600000/scsi@2/sd@2,0" 2 "sd" "/pci@1c,600000/scsi@2/sd@3,0" 4 "sd" "/pci@1c,600000/scsi@2,1" 1 "glm" "/pci@1d,700000" 3 "pcisch" "/pci@1d,700000/network@2" 2 "bge" "/pci@1d,700000/network@2,1" 3 "bge" "/pci@1d,700000/pci@1" 0 "pci_pci" "/pci@1d,700000/pci@1/pci@0" 1 "pci_pci" "/pci@1d,700000/pci@1/pci@0/network@0" 0 "ce" "/pci@1d,700000/pci@1/pci@0/network@1" 1 "ce" "/pci@1d,700000/pci@1/pci@4" 2 "pci_pci" "/pci@1d,700000/pci@1/pci@4/network@2" 2 "ce" "/pci@1d,700000/pci@1/pci@4/network@3" 3 "ce" -
Instance names correlate values in the last two fields, for example an entry for SCSI disk 3 on Sun v240 from file is «/pci@1c,600000/scsi@2/sd@2,0» 2 «sd»
this line & sd2 identify the same device
physical device path /pci@1c,600000/scsi@2/sd@2,0 identifies the path through the device tree to the device
different systems have different physical device names
prtconf command
- use prtconf command to display system configuration info
- prtconf lists all possible instances of devices (whether attached or not)
- use
prtconf | grep -v not
to list only attached devices on system
example prtconf output on Sun v240:
# prtconf | grep -v not System Configuration: Sun Microsystems sun4u Memory size: 8192 Megabytes System Peripherals (Software Nodes): SUNW,Sun-Fire-V240 scsi_vhci, instance #0 options, instance #0 memory-controller, instance #0 memory-controller, instance #1 pci, instance #0 network, instance #0 network, instance #1 pci, instance #1 isa, instance #0 i2c, instance #0 motherboard-fru-prom, instance #0 chassis-fru-prom, instance #1 power-supply-fru-prom, instance #2 power-supply-fru-prom, instance #3 dimm-spd, instance #4 dimm-spd, instance #5 dimm-spd, instance #6 dimm-spd, instance #7 dimm-spd, instance #8 dimm-spd, instance #9 dimm-spd, instance #10 dimm-spd, instance #11 nvram, instance #12 gpio, instance #0 gpio, instance #1 gpio, instance #2 gpio, instance #3 gpio, instance #4 gpio, instance #5 power, instance #0 serial, instance #0 serial, instance #1 rmc-comm, instance #0 pmu, instance #0 i2c, instance #0 gpio, instance #0 usb, instance #0 ide, instance #0 sd, instance #3 pci, instance #2 scsi, instance #0 sd, instance #0 sd, instance #1 sd, instance #2 sd, instance #4 scsi, instance #1 pci, instance #3 network, instance #2 network, instance #3 pci, instance #0 pci, instance #1 network, instance #0 network, instance #1 pci, instance #2 network, instance #2 network, instance #3 iscsi, instance #0 pseudo, instance #0 -
format utility
use format utility to display both logical & physical device names for all currently available disks
Example from Sun v240
# format Searching for disks...done AVAILABLE DISK SELECTIONS: 0. c1t0d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424> /pci@1c,600000/scsi@2/sd@0,0 1. c1t1d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424> /pci@1c,600000/scsi@2/sd@1,0 2. c1t2d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424> /pci@1c,600000/scsi@2/sd@2,0 3. c1t3d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424> /pci@1c,600000/scsi@2/sd@3,0 Specify disk (enter its number):
prtdiag command
use prtdiag command to display system configuration & system info
Reconfiguring devices
Solaris system can recognize devices that were just added by using various methods, including a reconfiguration boot, or devfsadm command
reconfiguration boot
reconfiguration boot process adds new device entries to /etc/path_to_inst file & symbolic links & device files to /dev & /devices directories
Example of a reconfiguration boot:
- create /reconfigure file, this file causes system to check for presence of newly installed devices at next boot/power on
- # touch /reconfigure
- shutdown system (reboot if device is already installed)
- install new device
- power on & boot system
- log in to system & use prtconf command to verify newly installed device
Note: On SPARC-based systems you can invoke a manual reconfiguration boot with open boot PROM (OBP) level command «boot -r». On x86/x64 systems use GRUB & edit kernel command associated with desired boot selection & add «-r» option then boot system
use devfsadm command
devfsadm command attempts to load every driver in the system & attach all possible device instances
For new devices devfsadm will:
- create physical device files in /devices directory
- create symbolic links in /dev directory
- manage entries in /etc/path_to_inst file
use devfsadm -c option to limit devfsadm to a particular device class
format:
devfsadm -c device_class [[-c|device_class1 -c device_class2 etc]]
values for device_class include disk, tape, port, audio, & pseudo
use devfsadm -i option to limit devfsadm to the name of a specific driver
format:
devfsadm -i driver_name
example: devfsadm -i sd limits devfsadm to those disks supported by the sd driver
Include -v option to devfsadm to display verbose output of changes to device tree
Run cleanup routines to remove unreferenced symbolic links & device files for devices no longer attached to system by using devfsadm -C C
Partitioning hard disk
use format utility to configure disk partitions & slices
X86/x64 systems require additional step to create a Solaris fdsik partition before you can create slices within that partition. SPARC systems do not use fdisk partitions
Solaris OS will perform disk partition as part of installation process
disk partitioning
Using format utility to create fdisk partitions or slices
- identify correct disk
- x86/x64 systems use fdisk menu in format utility to create fdisk partitions & save fdisk partition table to disk
- use partition menu in format utility to divide disk or Solaris fdisk partitions into slices
- label disk or Solaris fdisk partition
disk management
Slices are defined by an offset & a size, expressed in whole cylinders. On SPARC systems the offset is the distance from cylinder 0. On x86/x64 systems slice offsets are specified from 1st cylinder of Solaris fdisk partition
<insert pic & text details showing example>
On x86/x64 systems the format utility shows 1st cylinder of Solaris fdisk partition as cylinder 0
IDE/SATA disks in x86/x64 systems slice 8 occupies cylinder 0 & slice 9 cylinder 1 & 2.
Slice 8 & 9 are reserved so format utility does not allow changes to slice 8 & 9.
First available cylinder for additional slice definitions is cylinder 3.
Slice 2 starts at cylinder 0 & ends on last available cylinder of Solaris fdisk partition.
<insert pic of x86/x64 slice example>
identifying wasted disk space
when any cylinders are not allocated to any disk slice disk space is wasted
<insert pic showing unallocated cylinders>
once identified wasted space may be assigned to a slice
identifying overlapping disk slices
overlapping disk slices occur when cylinders are allocated to more than one disk slice
<insert pic of overlapping disk slices>
only format utility modify command warns of overlapping slices
Note: changing size of slices will make existing data inaccessible, backup or copy data to another location before resizing slices or changing partitions
format utility & disk partition table
format utility allows modification of two partition tables on disk:
- fdisk partition table
- Solaris OS partition tables (SPARC VTOC & x86/x64 VTOC)
fdisk partition tables
fdisk partition table defines up to four fdisk partitions on a disk
Solaris OS systems on x86/x64 platforms use fdisk partition table to determine parts of disk reserved for different operating systems & identify boot partition
Only x86/x64 systems use fdisk partition tables (fdisk menu from format utility)
Solaris OS partition tables
VTOC define slices that Solaris OS will use on a disk. use partition menu in format utility to view, modify, & save partition tables (VTOC)
- SPARC systems read VTOC from 1st sector of disk
- x86/x64 systems read VTOC from 2nd sector of Solaris fdisk partition
partition menu in format utility describes writing the VTOC as labeling the disk. Labeling means saving slice info into VTOC. Failure to label disk or Solaris fdisk partition after making changes the slice info changes will be lost
format utility works with /etc/format.dat file which is read when format utility is run
/etc/format.dat file is a table of available disk types & a set of predefined partition tables that can be used to partition a disk quickly
partition menu uses term partition exclusively instead of slice so the term partition & slice are identical
<insert image to show relationship between VTOC, memory, & /etc/format.dat>
save function in format utility
- writes partition table info into ./format.dat by default
- to save to /etc/format.dat specify absolute path or run format utility within /etc directory & accept default file name
- by default Solaris OS format.dat file exists in /etc directory
using format utility
type format at command prompt & use menu-driven choices to perform various format activites
Example of format:
# format Searching for disks...done AVAILABLE DISK SELECTIONS: 0. c1t0d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424> /pci@1c,600000/scsi@2/sd@0,0 1. c1t1d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424> /pci@1c,600000/scsi@2/sd@1,0 2. c1t2d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424> /pci@1c,600000/scsi@2/sd@2,0 3. c1t3d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424> /pci@1c,600000/scsi@2/sd@3,0 Specify disk (enter its number): 0 selecting c1t0d0 [[disk|formatted]] Warning: Current Disk has mounted partitions. /dev/dsk/c1t0d0s0 is currently mounted on /. Please see umount(1M). /dev/dsk/c1t0d0s1 is currently mounted on /usr/openwin. Please see umount(1M). /dev/dsk/c1t0d0s3 is currently mounted on /var. Please see umount(1M). /dev/dsk/c1t0d0s4 is currently used by swap. Please see swap(1M). /dev/dsk/c1t0d0s5 is currently mounted on /opt. Please see umount(1M). /dev/dsk/c1t0d0s6 is currently mounted on /usr. Please see umount(1M). /dev/dsk/c1t0d0s7 is currently mounted on /export/home. Please see umount(1M). FORMAT MENU: disk - select a disk type - select (define) a disk type partition - select (define) a partition table current - describe the current disk format - format and analyze the disk repair - repair a defective sector label - write label to the disk analyze - surface analysis defect - defect list management backup - search for backup labels verify - read and display labels save - save new disk/partition definitions inquiry - show vendor, product and revision volname - set 8-character volume name !<cmd> - execute <cmd>, then return quit format>
<insert example of using format utility to setup disk>
Using format utility to create fdisk partitions
- Only x86/x64 systems require fdisk partitions least one on each disk
- fdisk menu allows creation of up to four disk partitions
- only one Solaris OS fdisk partition can exist on a disk
<insert example of using format utility to setup fdisk partitions>
EFI Label & VTOC Label comparison
EFI & Volume Table of Contents (VTOC) differences:
- EFI supports disk sizes >1 TB
- EFI provides usable slices 0-6 (2 is not special)
- EFI label is typically 34 (0-33) sectors so partitions start at sector 34
- No cylinder, head, or sector info is stored in EFI label
- sizes are reported as blocks
- info that was stored in alternate cylinder areas (last two cylinders on disk) is now stored in slice 8
EFI Disk Label Restrictions
- cannot boot from disk with an EFI disk label
- cannot use fdisk command on disk with EFI label on >1 terabyte disks
- EFI specification prohibits overlapping slices
- EFI disk label provides info about disk or partition sizes in sectors & blocks
- format command save option is not supported (no format.dat file)
- format command backup option not applicable
Viewing the VTOC
- format command verify option
- prtvtoc command from CLI
Replacing SPARC or x86/x64 VTOC on disk
- use prtvtoc command to save VTOC info to a file
- use fmthard command to replace SPARC or x86/x64 VTOC
- prtvtoc & fmthard commands read & write VTOC on disks & do not modify fidsk partitions
Example:
# prtvtoc /dev/rdsk/c1t0d0s2 * /dev/rdsk/c1t0d0s2 partition map * * Dimensions: * 512 bytes/sector * 424 sectors/track * 24 tracks/cylinder * 10176 sectors/cylinder * 14089 cylinders * 14087 accessible cylinders * * Flags: * 1: unmountable * 10: read-only * * Unallocated space: * First Sector Last * Sector Count Sector * 0 4100928 4100927 * * First Sector Last * Partition Tag Flags Sector Count Sector Mount Directory 0 2 00 4100928 24005184 28106111 / 1 4 00 28106112 10247232 38353343 /usr/openwin 2 5 00 0 143349312 143349311 3 7 00 38353344 2818752 41172095 /var 4 3 01 0 4100928 4100927 5 0 00 41172096 10247232 51419327 /opt 6 4 00 51419328 10003008 61422335 /usr 7 8 00 61422336 81926976 143349311 /export/home - prtvtoc /dev/rdsk/c1t0d0s2 > /var/tmp/c1t0d0s2.vtoc - ls /var/tmp c1t0d0s2.vtoc - cat /var/tmp/c1t0d0s2.vtoc * /dev/rdsk/c1t0d0s2 partition map * * Dimensions: * 512 bytes/sector * 424 sectors/track * 24 tracks/cylinder * 10176 sectors/cylinder * 14089 cylinders * 14087 accessible cylinders * * Flags: * 1: unmountable * 10: read-only * * Unallocated space: * First Sector Last * Sector Count Sector * 0 4100928 4100927 * * First Sector Last * Partition Tag Flags Sector Count Sector Mount Directory 0 2 00 4100928 24005184 28106111 / 1 4 00 28106112 10247232 38353343 /usr/openwin 2 5 00 0 143349312 143349311 3 7 00 38353344 2818752 41172095 /var 4 3 01 0 4100928 4100927 5 0 00 41172096 10247232 51419327 /opt 6 4 00 51419328 10003008 61422335 /usr 7 8 00 61422336 81926976 143349311 /export/home - fmthard -s /var/tmp/c1t0d0s2.vtoc /dev/rdsk/c1t0d0s2 fmthard: New volume table of contents now in place. - prtvtoc /dev/rdsk/c1t0d0s2 * /dev/rdsk/c1t0d0s2 partition map * * Dimensions: * 512 bytes/sector * 424 sectors/track * 24 tracks/cylinder * 10176 sectors/cylinder * 14089 cylinders * 14087 accessible cylinders * * Flags: * 1: unmountable * 10: read-only * * Unallocated space: * First Sector Last * Sector Count Sector * 0 4100928 4100927 * * First Sector Last * Partition Tag Flags Sector Count Sector Mount Directory 0 2 00 4100928 24005184 28106111 / 1 4 00 28106112 10247232 38353343 /usr/openwin 2 5 00 0 143349312 143349311 3 7 00 38353344 2818752 41172095 /var 4 3 01 0 4100928 4100927 5 0 00 41172096 10247232 51419327 /opt 6 4 00 51419328 10003008 61422335 /usr 7 8 00 61422336 81926976 143349311 /export/home -
X86/x64 VTOC info & Solaris fdisk partitions
On x86/x64 systems Solaris fdisk partition must much size in VTOC. If the info doesn't match fmthard reports an error.
To fix:
- Use partition menu in format utility to adjust slices in Solaris fdisk partition
- Use fdisk menu in format utility to adjust fdisk partition to match size defined in prtvtoc output. Use fmthard to write x86/x64 VTOC info to disk
- Use fdisk command to replace the fdisk partition table with save fdisk partition info, use fmthard to write the x86/x64 VTOC info to disk
Replace fdisk partition tables on x86/x64 systems
fdisk command enables user to:
- view & modify fdisk partition tables on disk
- save fdisk partition table to file
- replace fdisk partition table on disk with file of saved partition table info
view fdisk partition table
- fdisk -W - /dev/rdsk/name
fdisk commands lists disk geometry, all possible partition types & their corresponding ID values, & current defined fdisk partitions
Save fdisk partition table info to a file
Example:
- fdisk -W to save partition table info /dev/rdsk/fdisk partition 0 of correct disk
Replace fdisk partition table on disk with save info
Example:
- fdisk -F of partition table info /dev/rdsk/fdisk partition 0 of correct disk
-F option will zero out VTOC on Solaris partition if fdisk partition table changes
Extended Volume Table of Contents
prior to Solaris 10 10/09 release the Sun disk label limited the size of bootable disk to <1 TB. Now <2 TB is supported with 64–bit Solaris kernel
Extended VTOC feature is available after standard installation of Solaris 10 10/09
No support for >1 TB disks on Solaris 32-bit kernel
Prior to Solaris 10 10/09 Extensible Firmware Interface (EFI) label was always used for a >1 TB disk
VTOC label is extended to any size disk, but addressable space in VTOC is limited to <2 TB
Features of the new Extended VTOC
- fdisk utility works on >1 TB disks on x86 systems, Up to 2 TB partitions in Master Boot Record (MBR) for non-EFI partition types.
- format -e utility is used to label a disk of any size with VTOC label. Addressable space is limited to 2 TB
- when fdisk utility is run on >2 TB disk a warning message is displayed indicating that a non-EFI partition >2 TB cannot be created
Extended VTOC Requirements & Dependencies
- Supported by x86 (64-bit) & SPARC & utilizes the Newboot feature
- Works with target & HBA drivers that support disks >1 TB
- DAD & IDE on SPARC & PCMCIA on x86 systems do not support disks >1 TB
Interface Configurations
network commands such as ifconfig, ping, & snoop control & monitor functionality of network interfaces
View MAC address
- use ifconfig -a command as root user
- On SPARC system that hasn't booted use boot programmable read-only memory (PROM) banner command. At ok prompt type banner
Example:
# ifconfig -a lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1 inet 127.0.0.1 netmask ff000000 bge0: flags=1004843<UP,BROADCAST,RUNNING,MULTICAST,DHCP,IPv4> mtu 1500 index 2 inet 192.168.1.55 netmask ffffff00 broadcast 192.168.1.255 ether 0:3:ba:a5:e2:eb - exit $ ifconfig -a ksh: ifconfig: not found $
IP address
- use ifconfig -a command
- shows interface as up or down
- Change interface state
Ping
- confirm basic IP connectivity over network by using ICMP ECHO_REQUEST.
- use ping command format # ping IP address
for ping command to succeed conditions must be true on both systems:
- interface must be plumbed
- interface must be properly onfigured
- interface must be up
- interface must be physically connected
- interface must have valid routes configured
Trace utility
- use traceroute command to trace the route that IP packet follows to another IP host
Capture & inspecting network packets
use snoop utility to capture & inspect network packetsm
format # snoop IP address IP address
use Control-C to exit snoop utility
use option -a to enable audible clicks
Example of enabling audible clicks for all network traffic related to DHCP:
- snoop -a dhcp
Additional snoop options
snoop summary output
snoop -o filename save captured packets in filename
snoop -i filename displays packets previously saved to file
snoop -i filename -v file output to verbose mode
snoop -i filename -V file output to summary verbose mode
snoop -i filename -x offset displays packet data in hexadecimal & ASCII format
snoop -d device receives packets from a network interface specified by device
Configure IPv4 interfaces at boot time
files & services that impact IP interfaces:
- svc:/network/physical:default service
- /etc/hostname.xxn file
- /etc/inet/hosts
- /etc/inet/ipnodes
svc:/network/physical:default service
- service calls /lib/svc/method/net-physical method script, a startup script
- script uses ifconfig utility to configure each interface with IP information
- script searches for files called hostname.xxn in the /etc directory where xx is an interface type and n is the instance of the interface
- each .xxn file found the script uses ifconfig command with plumb option to make the kernel ready to talk to this type of interface
- script then configures the named interface using other options to the ifconfig command
/etc/hostname.xxn file
- file contains information that configures named interface
Entry Interface
e1000g0 First e1000g (Intel PRO/1000 Gigabit family device driver) Ethernet interface in the system
bge0 First bge (Broadcom Gigabit Ethernet device driver) Ethernet interface in the system
qfe0 First qfe (Quad Fast-Ethernet device driver) Ethernet interface in system
nge0 First nge (Nvidia Gigabit Ethernet driver) Ethernet interface in the system
- The /etc/hostname.bge0 file contains host name or IP address of system that contains the bge0 interface.
- the host name contained in the file must exist in the /etc/inet/hosts file so that it can be resolved to an IP address at boot time
- You can edit /etc/hostname.bge0 file to contain either host name or IP address from /etc/inet/hosts file
NOTE In this example the Solaris machine uses DHCP without defined host so host is unknown.
root@unknown # ls -l /etc/hostname.bge0 -rw-r--r-- 1 root root 1 May 17 10:30 /etc/hostname.bge0 root@unknown # cat /etc/hostname.bge0 root@unknown # more /etc/inet/hosts - - Internet host table - 127.0.0.1 localhost loghost 192.168.1.10 unknown # Added by DHCP root@unknown # ifconfig -a lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1 inet 127.0.0.1 netmask ff000000 bge0: flags=1004843<UP,BROADCAST,RUNNING,MULTICAST,DHCP,IPv4> mtu 1500 index 2 inet 192.168.1.10 netmask ffffff00 broadcast 192.168.1.255 ether 0:14:4f:47:bf:9e root@unknown #
/etc/inet/hosts
- a file that associates the IP addresses of hosts with their names
- you can use file with, or instead of, other hosts databases, including DNS, NIS hosts map, & the NIS+ hosts table
- programs use library interfaces to access info in the file
- file contains at least the loopback & host info
/etc/ipnodes file
- symbolic link to /etc/inet/hosts file
- associates names of nodes with IP addresses
- can be used in conjunction with, instead of, other ipnodes databases, including DNS, NIS ipnodes map, & LDAP
- IP addresses can be defined in ipnodes or hosts file
- ipnodes file is searched first then hosts file
Changing System Host Name
- host name is contained in four files on system
- all must be modified & system rebooted to successfully change system's host name
- four files:
- /etc/nodename
- /etc/hostname.xxn
- /etc/inet/hosts
- /var/crash if crash dump is enabled on system
use uname -S command to temporarily change host name
edit /etc/nodename file
Each Solaris OS has a canonical name, which is the official name used when referring to a system. the system name is the same as host name associated with IP address of the primary network interface, for example, hostname.bge0
change canonical name by editing the /etc/nodename file & reboot system
if interface is managed by DHCP or remote procedure call (RPC) bootparams protocols, the /etc/nodename file is not used
My example using DHCP /etc/nodename file doesn't exist:
# more /etc/nodename /etc/nodename: No such file or directory -
/etc/hostname.xxn file
/etc/inet/hosts
- host names are text strings up to 24 characters
- alphabetic characters, numbers, hyphen, period are allowed in host name
- periods are allowed only to delimit components of domain style names
- first character must be alphabetic character
- last character cannot be hyphen or period
- not case sensitive (unless NIS naming service is used, uppercase characters in names have been known to cause problems with NIS)
- A hash (#) indicates the beginning of a command
Sys-unconfig command
use sys-unconfig command to undo a system configuration & restore to unconfigured state so you can reconfigure
sys-unconfig commands does:
- save /etc/inet/hosts file to /etc/inet/hosts.saved
- if /etc/vfstab file contains NFS mount entries file is saved to /etc/vfstab.orig file
- restores default /etc/inet/hosts file
- removes default host name in /etc/hostname.xxn file for all configured interfaces
- removes default domain name in /etc/defaultdomain file
- removes the time zone to PST8PDT in /etc/TIMEZONE file
- resets naming services to local files
- removes the /etc/inet/netmasks file
- remotes the /etc/defaultrouter file
- removes password set for root user in /etc/shadow file
- removes /etc/.rootkey file for NIS+
- executes all system configuration applications (applications are defined by prior use of sysidconfig -a command)
- removes /etc/resolv.conf file for DNS clients
- disables LDAP by removing:
- /var/ldap/ldap_client_cache file
- /var/ldap/ldap_client_file file
- /var/ldap/ldap_client_cred file
- /var/ldap/cachemgr.log file
- regenerate keys for sshd
when sys-unconfig command is finish the system is shutdown
can only be run as root user
when system is powered on a configuration script prompts you to configure system info
sys-unconfig command is not available on diskless client
Managing Solaris OS Unix File System (UFS)
Solaris OS file systems
file system is a collection of files & directories that make up a structured set of info
Solaris OS supports three different types of file systems:
- disk-based file systems
- distributed file systems
- pseudo file systems
Disk-based file systems
disk-based file systems are found on hard disks, CD-ROMS, diskettes, DVDs, Blue-Rays
Some examples of disk-based file systems:
- usf - Unix File System
- hsfs - High Sierra Format
- pcfs - PC File System
- udfs - Universal Disk Format
- ZFS - Zettabyte File System
Distributed File Systems
distributed file systems provide network access to file system resources
- NFS - Network File System
Pseudo File Systems
pseudo file systems are memory based
Some examples of pseudo file systems:
- tmpfs - Temporary File System
- swapfs - swap file system is used by kernel to manage swap space on disks
- fdfs - file descriptor file system provides explicit names for opening files by using file descriptors in /dev/fd directory
- procfs - process file system contains list of active processes from /proc directory, ps command uses information from /proc
- lofs - loopback file system provides access to existing files using alternate pathnames
- mntfs - mount file system provides read-only info from the kernel about locally mounted file systems
- objfs - kernel object file system, used by kernel to store details relating to modules currently loaded by kernel, used for the /system/object directory
- devfs - device file system is used to manage the namespace of all devices on system, file system is used for the /devices directory
- ctfs - contract file system is associated with /system/contract directory. Used by Service Management Facility (SMF) to track the processes which compose a service
mount command with -p or -v options displays file system types currently in use
Creating new ufs file system
user views ufs differently than Solaris OS. user views file system as collection of files & directories, to Solaris OS the file system appears as a collection of control structures & data blocks that occupy space defined by a partition
Solaris OS stores data in a logical file hierarchy often consisting of several file systems, file hierarchy is referred to as Solaris directory hierarchy
The ufs file system must be created on disk before being used by Solaris OS
Solaris systems typically use multiple ufs file systems to store directories & files
Example:
- using mount -p command shows the root (/) & /var directories as ufs & / directory on c0t0d0s0 & /var directory on c0t0d0s5.
# mount -p | grep ufs /dev/dsk/c0t0d0s0 - / ufs - no rw,intr,largefiles,logging,xattr,onerror=panic /dev/dsk/c0t0d0s5 - /var ufs - no rw,intr,largefiles,logging,xattr,onerror=panic -
utilize the format utility to view partition tables:
Part Tag Flag Cylinders Size Blocks 0 root wm 1719 - 11168 10.74GB (9450/0/0) 22528800 1 swap wu 0 - 1718 1.95GB (1719/0/0) 4098096 2 backup wm 0 - 65532 74.50GB (65533/0/0) 156230672 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 var wm 11169 - 16323 5.86GB (5155/0/0) 12289520 6 unassigned wm 0 0 (0/0/0) 0 7 unassigned wm 0 0 (0/0/0) 0
Partition tables & reserved space
to create ufs in Solaris system space must be available on disk & that space must be defined in a partition
- disk labels record the locations & boundaries of disk slicees
- the label that contains slice definitions is also known as volume table of contents (VTOC)
- on SPARC systems VTOC is located in sector 0 on disk
- on x86/x64 systems VTOC is located in second sector of the Solaris fdisk partition. on x86/x64 systems slice 8 occupies the first cylinder of Solaris fdisk partition, & protects x86/x64 VTOC
Solaris OS file systems do not use the following sectors of the slices in which they reside:
- sector 0 - reserved for VTOC on SPARC systems, if if a ufs file system on a SPARC system occupies a slice that starts on first disk cylinder, this sector would contain the SPARC VTOC. Every ufs on SPARC & x86/x64 systems skip sector 0
- sector 1 - 15 - these sectors are reserved for bootstrap program (bootblk) used by SPARC systems. only a slice that contains a file system from which a SPARC system boots would contain a bootstrap program in these sectors. Every ufs on SPARC & x86/x64 systems skip sector 1 - 15.
Solaris OS ufs structures begin at sector 16 of the slice that holds the file system on both SPARC & x86/x64 systems.
Ufs file system structures
primary superblock
The primary superblock resides in the 16 disk sectors (sectors 16 to 31 relative to first sector on slice) that follow the space reserved for a SPARC boot block.
superblock is a table of info that describes the file system which includes:
- # of data blocks
- # of cylinder groups
- size of a data block & fragment
- description of hardware, derived from the label
- name of the mount point
- file system state flag, flags are:
- clean
- stable
- active
- logging
- unknown
backup superblocks
when file system is created a backup copy of the superblock is created beginning at sector 32 & an additional backup is created at the beginning of each cylinder group. The replication protects the critical data in the superblock against catastrophic loss
cylinder groups
each file system is divided into cylinder groups with a minimum default size of 16 cylinders per group
cylinder groups improve disk access & ufs constantly optimizes disk performance by moving file's data into a single cylinder group, large sized files > one cylinder are stored in multiple cylinders
cylinder group blocks
cylinder group block is a table in each cylinder group that describes the cylinder group, including:
- # of inodes
- # of data blocks in cylinder group
- # of directories
- free blocks, inodes, & fragments in cylinder group
- free block map
- used inode map
<insert diagram that shows Solaris OS ufs structure>
usf inode
inode contains the following info about a file
- type of file & access modes
- user identification (UID) & group identification (GID) numbers of the file's owner & group
- size of the file
- link count
- time the file was last accessed & modified & the inode changed
- total # of data blocks used by or allocated to the file
- two types of pointers: direct pointers & indirect pointers
<insert visual depiction of inode>
direct pointers
inside inode there are 12 direct pointers, which contain addresses for the file's first 12 data blocks. the 12 direct pointers can each reference 8-Kbye data blocks for a file that is up to 96Kbytes
indirect pointers
three types of indirect pointers are within an inode are:
- single indirect pointer - refers to a file system block that contains pointers to data blocks. this file system block contains 2048 additional addresses of 8-Kbyte data blocks, which can point to an additional 16 Mbytes of data
- double indirect pointer - refers to a file system block that contains single indirect pointers, each indirect pointer refers to a file system block that contains the data block pointers, double indirect pointers point to an additional 32 Gbytes of data
- triple indirect pointer - can reference up to an additional 64 Tbytes of data
data blocks
- remaining space allocated to ufs file system holds data blocks
- data blocks are allocated, by default, in 8-Kbyte logical block sizes
- blocks are further divided into 1-Kbyte fragments
- for a regular file, data blocks contains the contents of the file
- for a directory, data blocks contain entries that associate the inode numbers & the file names of the files & directories contained in that directory
- blocks not being used as files, directories, indirect address blocks, or storage blocks are marked as free in cylinder group map
- cylinder group map also keeps track of fragments to prevent disk performance degradation
fragmentation
fragmentation is a method to allocate disk space efficiently, files less than 96 Kbytes in size are stored using fragmentation
by default, data blocks can be divided into eight fragments of 1024 bytes each. fragments store files & pieces of files smaller than 8192 bytes. for files larger than 96 Kbytes, fragments are never allocated & full blocks are exclusively used
<insert graphic showing 1024 byte fragment in a data block of 8192 bytes>
if a file contained in a fragment grows & requires more space, it is allocated to one or more additional fragments in the same data block
<insert graphic showing two 3KB files in 1 8KB data block>
ufs does not allow fragments from same file to be stored in different data blocks
using new ufs command
- to use a disk to store directories & files a file system must be created on the partition the system wants to use
- as root user use newfs command to create ufs file system on a disk
- newfs command is a user friendly front end to the mkfs command, which is used to create file systems
- newfs command is in /usr/sbin directory
- existing data on a disk partition will be lost once ufs is created
Create partition
# format Searching for disks...done AVAILABLE DISK SELECTIONS: 0. c1t0d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424> /pci@1c,600000/scsi@2/sd@0,0 1. c1t1d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424> /pci@1c,600000/scsi@2/sd@1,0 2. c1t2d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424> /pci@1c,600000/scsi@2/sd@2,0 3. c1t3d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424> /pci@1c,600000/scsi@2/sd@3,0 Specify disk (enter its number): 3 selecting c1t3d0 [[disk|formatted]] FORMAT MENU: disk - select a disk type - select (define) a disk type partition - select (define) a partition table current - describe the current disk format - format and analyze the disk repair - repair a defective sector label - write label to the disk analyze - surface analysis defect - defect list management backup - search for backup labels verify - read and display labels save - save new disk/partition definitions inquiry - show vendor, product and revision volname - set 8-character volume name !<cmd> - execute <cmd>, then return quit format> partition PARTITION MENU: 0 - change `0' partition 1 - change `1' partition 2 - change `2' partition 3 - change `3' partition 4 - change `4' partition 5 - change `5' partition 6 - change `6' partition 7 - change `7' partition select - select a predefined table modify - modify a predefined partition table name - name the current table print - display the current table label - write partition map and label to the disk !<cmd> - execute <cmd>, then return quit partition> modify Select partitioning base: 0. Current partition table (anon) 1. All Free Hog Choose base (enter number) [[0]]? 0 Part Tag Flag Cylinders Size Blocks 0 unassigned wm 0 - 2060 10.00GB (2061/0/0) 20972736 1 unassigned wm 2061 - 3091 5.00GB (1031/0/0) 10491456 2 backup wu 0 - 14086 68.35GB (14087/0/0) 143349312 3 - wu 3092 - 5152 10.00GB (2061/0/0) 20972736 4 - wu 5153 - 7213 10.00GB (2061/0/0) 20972736 5 unassigned wm 7214 - 9274 10.00GB (2061/0/0) 20972736 6 unassigned wm 9275 - 9964 3.35GB (690/0/0) 7021440 7 unassigned wm 9965 - 14086 20.00GB (4122/0/0) 41945472 Do you wish to continue creating a new partition table based on above table[[yes]]? yes Free Hog partition[[6]]? Enter size of partition '0' [[20972736b,|2061c, 10240.59mb, 10.00gb]]: 10gb Enter size of partition '1' [[10491456b,|1031c, 5122.78mb, 5.00gb]]: 5gb Enter size of partition '3' [[20972736b,|2061c, 10240.59mb, 10.00gb]]: 5gb Enter size of partition '4' [[20972736b,|2061c, 10240.59mb, 10.00gb]]: 5gb Enter size of partition '5' [[20972736b,|2061c, 10240.59mb, 10.00gb]]: 5gb Enter size of partition '7' [[41945472b,|4122c, 20481.19mb, 20.00gb]]: 5gb Part Tag Flag Cylinders Size Blocks 0 unassigned wm 0 - 2060 10.00GB (2061/0/0) 20972736 1 unassigned wm 2061 - 3091 5.00GB (1031/0/0) 10491456 2 backup wu 0 - 14086 68.35GB (14087/0/0) 143349312 3 - wu 3092 - 4122 5.00GB (1031/0/0) 10491456 4 - wu 4123 - 5153 5.00GB (1031/0/0) 10491456 5 unassigned wm 5154 - 6184 5.00GB (1031/0/0) 10491456 6 unassigned wm 6185 - 13055 33.34GB (6871/0/0) 69919296 7 unassigned wm 13056 - 14086 5.00GB (1031/0/0) 10491456 Okay to make this the current partition table[[yes]]? yes Enter table name (remember quotes): "anon" Ready to label disk, continue? y partition> quit FORMAT MENU: disk - select a disk type - select (define) a disk type partition - select (define) a partition table current - describe the current disk format - format and analyze the disk repair - repair a defective sector label - write label to the disk analyze - surface analysis defect - defect list management backup - search for backup labels verify - read and display labels save - save new disk/partition definitions inquiry - show vendor, product and revision volname - set 8-character volume name !<cmd> - execute <cmd>, then return quit format> save Saving new disk and partition definitions Enter file name[["./format.dat"]]: ./format-c1t30s0.dat format> quit
Create ufs
# newfs /dev/rdsk/c1t3d0s0 newfs: construct a new file system /dev/rdsk/c1t3d0s0: (y/n)? y Warning: 2880 sector(s) in last cylinder unallocated /dev/rdsk/c1t3d0s0: 20972736 sectors in 3414 cylinders of 48 tracks, 128 sectors 10240.6MB in 214 cyl groups (16 c/g, 48.00MB/g, 5824 i/g) super-block backups (for fsck -F ufs -o b=#) at: 32, 98464, 196896, 295328, 393760, 492192, 590624, 689056, 787488, 885920, 20055584, 20154016, 20252448, 20350880, 20449312, 20547744, 20646176, 20744608, 20843040, 20941472 -
ufs command outputs basic disk geometry & ufs created on slice 0 (c1t3d0s0), the beginning sector locations of backup superblocks also displayed
nfs -i command is used to specify density of the number of bytes per inode in file system
Determine number of bytes per inode (nbpi) with mkfs -m command:
# mkfs -m /dev/rdsk/c1t3d0s0 mkfs -F ufs -o nsect=128,ntrack=48,bsize=8192,fragsize=1024,cgsize=16,free=1,rps=167,nbpi=8155,opt=t,apc=0,gap=0,nrpos=8,maxcontig=128,mtb=n /dev/rdsk/c1t3d0s0 20972736 -
repeat process for each partition and slice that needs a new file system
reserve free space
# newfs -m 2 /dev/dsk/c1t3d0s0 newfs: construct a new file system /dev/rdsk/c1t3d0s0: (y/n)? y Warning: 2880 sector(s) in last cylinder unallocated /dev/rdsk/c1t3d0s0: 20972736 sectors in 3414 cylinders of 48 tracks, 128 sectors 10240.6MB in 214 cyl groups (16 c/g, 48.00MB/g, 5824 i/g) super-block backups (for fsck -F ufs -o b=#) at: 32, 98464, 196896, 295328, 393760, 492192, 590624, 689056, 787488, 885920, 20055584, 20154016, 20252448, 20350880, 20449312, 20547744, 20646176, 20744608, 20843040, 20941472
fstyp command
show minimum free size with fstyp & -v option
# fstyp -v /dev/dsk/c1t3d0s0 | grep minfree minfree 2% maxbpg 2048 optim time - fstyp -v /dev/rdsk/c1t3d0s0 | head ufs magic 11954 format dynamic time Wed Oct 5 15:57:18 2011 sblkno 16 cblkno 24 iblkno 32 dblkno 760 sbsize 2048 cgsize 8192 cgoffset 64 cgmask 0xffffffc0 ncg 214 size 10486368 blocks 10327132 bsize 8192 shift 13 mask 0xffffe000 fsize 1024 shift 10 mask 0xfffffc00 frag 8 shift 3 fsbtodb 1 minfree 2% maxbpg 2048 optim time maxcontig 128 rotdelay 0ms rps 167 -
show minimum free size with fstyp & -v option
# fstyp -v /dev/rdsk/c1t3d0s0 | head ufs magic 11954 format dynamic time Wed Oct 5 15:57:18 2011 sblkno 16 cblkno 24 iblkno 32 dblkno 760 sbsize 2048 cgsize 8192 cgoffset 64 cgmask 0xffffffc0 ncg 214 size 10486368 blocks 10327132 bsize 8192 shift 13 mask 0xffffe000 fsize 1024 shift 10 mask 0xfffffc00 frag 8 shift 3 fsbtodb 1 minfree 2% maxbpg 2048 optim time maxcontig 128 rotdelay 0ms rps 167 -
changing minimum free size
# tunefs -m 1 /dev/rdsk/c1t3d0s0 minimum percentage of free space changes from 2% to 1% - fstyp -v /dev/dsk/c1t3d0s0 | grep minfree minfree 1% maxbpg 2048 optim time -