with Solaris. As in the FreeBSD writeup, the usage of a free disk slice
or else a swap file is discussed. The following details our host info:
HOST: snorkle PROMPT: snorkle [0] OS: Solaris 10 x86While detailed is Solaris 10 x86 for our examples, the following should
be usable on prior Solaris versions, both sparc and x86.
SLICE: If you already have a free slice that isn't being used for
anything else, it can be easily added as swap space:
snorkle [0] /usr/sbin/swap -a /dev/dsk/c1t3d0s0Since I don't have any free slice on a configured disk, I need to create
one on an available disk. A quick check with 'format' gives us our
known disks:
snorkle [0] echo "q" | /usr/sbin/format Searching for disks...done AVAILABLE DISK SELECTIONS: 0. c1t0d0 <DEFAULT cyl 1334 alt 2 hd 255 sec 63> /pci@0,0/pci1000,8000@14/sd@0,0 1. c1t1d0 <DEFAULT cyl 1334 alt 2 hd 255 sec 63> /pci@0,0/pci1000,8000@14/sd@1,0 2. c1t2d0 <DEFAULT cyl 1334 alt 2 hd 255 sec 63> /pci@0,0/pci1000,8000@14/sd@2,0 3. c1t3d0 <DEFAULT cyl 509 alt 2 hd 64 sec 32> /pci@0,0/pci1000,8000@14/sd@3,0 4. c1t4d0 <DEFAULT cyl 509 alt 2 hd 64 sec 32> /pci@0,0/pci1000,8000@14/sd@4,0 Specify disk (enter its number): `q' is not an integer. Specify disk (enter its number):Since I know that 'c1t3d0' isn't currently being used for anything, we
can use it to set up a swap slice. For Solaris x86, we first need to use
'fdisk' to set up an initial Solaris partition. (For Solaris sparc, skip
'fdisk' and proceed straight to 'format'.) The following uses 'fdisk'
to create a Solaris partition spanning all available disk space on
'c1t3d0', destroying any previous disk labels:
snorkle [1] /usr/sbin/fdisk -B -d /dev/rdsk/c1t3d0p0 Physical Geometry: cylinders[511] heads[64] sectors[32] sector size[512] blocks[1046528] mbytes[511] Virtual (HBA) Geometry: cylinders[0] heads[0] sectors[0] sector size[512] blocks[0] mbytes[0] About to write fdisk table: SYSID ACT BHEAD BSECT BEGCYL EHEAD ESECT ENDCYL RELSECT NUMSECT 191 128 254 63 1023 254 63 1023 2048 1044480 100 0 0 0 0 0 0 0 100 100 100 0 0 0 0 0 0 0 100 100 100 0 0 0 0 0 0 0 100 100 Clearing VTOC labels from NEW table Clearing primary VTOC at byte 1049088 (block 2049) Clearing backup VTOC at byte 535806464 (block 1046497) Clearing backup VTOC at byte 535807488 (block 1046499) Clearing backup VTOC at byte 535808512 (block 1046501) Clearing backup VTOC at byte 535809536 (block 1046503) Clearing backup VTOC at byte 535810560 (block 1046505)A second usage of 'fdisk' simply verifies the partition was created:
snorkle [0] /usr/sbin/fdisk -W - /dev/rdsk/c1t3d0p0 * /dev/rdsk/c1t3d0p0 default fdisk table * Dimensions: * 512 bytes/sector * 32 sectors/track * 64 tracks/cylinder * 511 cylinders * * systid: * 1: DOSOS12 * 2: PCIXOS * 4: DOSOS16 * 5: EXTDOS * 6: DOSBIG * 7: FDISK_IFS * 8: FDISK_AIXBOOT * 9: FDISK_AIXDATA * 10: FDISK_0S2BOOT * 11: FDISK_WINDOWS * 12: FDISK_EXT_WIN * 14: FDISK_FAT95 * 15: FDISK_EXTLBA * 18: DIAGPART * 65: FDISK_LINUX * 82: FDISK_CPM * 86: DOSDATA * 98: OTHEROS * 99: UNIXOS * 101: FDISK_NOVELL3 * 119: FDISK_QNX4 * 120: FDISK_QNX42 * 121: FDISK_QNX43 * 130: SUNIXOS * 131: FDISK_LINUXNAT * 134: FDISK_NTFSVOL1 * 135: FDISK_NTFSVOL2 * 165: FDISK_BSD * 167: FDISK_NEXTSTEP * 183: FDISK_BSDIFS * 184: FDISK_BSDISWAP * 190: X86BOOT * 191: SUNIXOS2 * 238: EFI_PMBR * 239: EFI_FS * * Id Act Bhead Bsect Bcyl Ehead Esect Ecyl Rsect Numsect 191 128 254 63 1023 254 63 1023 2048 1044480A quick check of the disk slices on 'c1t3d0' via 'prtvtoc' allows us to
see how much space we can allocate for swap. (For x86, an SMI layout
includes slice 8, used for the boot block, VTOC, disk label, etc, and thus
is required. Sparc hosts won't have slice 8 when using an SMI layout.)
Since our host is of the x86 variety, we need to account for the space
and location used by 'slice 8' before creating our swap slice. While we
could interactively use 'format' for slice creation, we'll automate it
instead. To do so, account for our new slice size by subtracting the
"Sector Count" of 'slice 8' from that of 'slice 2', this will be our
block count. After this, create an input file for 'format' to use:
snorkle [0] /usr/sbin/prtvtoc /dev/rdsk/c1t3d0s2 <snip...> * First Sector Last * Partition Tag Flags Sector Count Sector Mount Directory 2 5 01 0 1040384 1040383 8 1 01 0 2048 2047 snorkle [0] /usr/bin/expr 1040384 - 2048 1038336 snorkle [0] /usr/bin/cat /tmp/c1t3d0.input partition 0 "" "" 1 1038336b label quit quitThe breakdown of the input file is:
partition # command to work on partitions (disk slices) 0 # partition (disk slice) number to work on "" # tag [unassigned] "" # permission flags [wm] (wm is default) 1 # starting cylinder (accounting for 'slice 8' on x86) 1038336b # size in blocks (1040384 - 2048) label # command to create the disk label / VTOC quit # exit work on partitions quit # exit format commandThe following 'format' command suppresses STDOUT (-s), sets the command
file to use (-f), creates a log file for STDERR (-l), and operates on
'c1t3d0'. The result of slice creation is verified via 'prtvtoc':
snorkle [0] /usr/sbin/format -s -f /tmp/c1t3d0.input -l /tmp/c1t3d0.out c1t3d0 snorkle [0] /usr/sbin/prtvtoc -h /dev/rdsk/c1t3d0s2 0 0 00 2048 1038336 1040383 2 5 01 0 1040384 1040383 8 1 01 0 2048 2047With the setup work out of the way, we can add the new swap space and
verify that it was added via 'swap':
snorkle [0] /usr/sbin/swap -a /dev/dsk/c1t3d0s0 before adding: snorkle [0] /usr/sbin/swap -l swapfile dev swaplo blocks free /dev/dsk/c1t0d0s1 32,1 8 2313352 2313352 after adding: snorkle [0] /usr/sbin/swap -l swapfile dev swaplo blocks free /dev/dsk/c1t0d0s1 32,1 8 2313352 2313352 /dev/dsk/c1t3d0s0 32,256 8 1038328 1038328To retain the new swap space through a system reboot, add 'c1t3d0s0'
to /etc/vfstab as seen below:
snorkle [0] /usr/bin/grep swap /etc/vfstab /dev/dsk/c1t0d0s1 - - swap - no - /dev/dsk/c1t3d0s0 - - swap - no - swap - /tmp tmpfs - yes -SWAPFILE: For the second option, locate an out of the way place on an
existing filesystem with adequate space for the swap file to reside.
For our purposes, we'll use '/opt/swapfile' for a new 512 MB swap file.
Start by verifying that the directory structure is available and that
the swap file doesn't already exist:
snorkle [0] [ ! -d /opt ] && /usr/bin/mkdir /opt snorkle [0] /usr/bin/ls /opt/swapfile /opt/swapfile: No such file or directoryThere are two options available to create the new swap file. The
first, 'mkfile', is the standard in Solaris. The second is by way of
'dd'. The following sets up 'swapfile' via 'mkfile', and verifies its
creation and attributes:
snorkle [2] /usr/sbin/mkfile -v 512m /opt/swapfile /opt/swapfile 536870912 bytes snorkle [0] /usr/bin/du -sh /opt/swapfile 512M /opt/swapfile snorkle [0] /usr/bin/ls -ld /opt/swapfile -rw------T 1 root root 536870912 Jan 6 12:51 /opt/swapfileTo do the same with the 'dd' method, after using 'dd' we need to set
the appropriate ownership and permissions:
snorkle [0] /usr/bin/dd if=/dev/zero of=/opt/swapfile bs=1k count=512k 524288+0 records in 524288+0 records out snorkle [0] /usr/bin/chown root:root /opt/swapfile snorkle [0] /usr/bin/chmod 1600 /opt/swapfile snorkle [0] /usr/bin/du -sh /opt/swapfile 512M /opt/swapfile snorkle [0] /usr/bin/ls -ld /opt/swapfile -rw------T 1 root root 536870912 Jan 6 12:59 /opt/swapfileNow simply add the swap file via 'swap' and verify that it was added:
snorkle [0] /usr/sbin/swap -a /opt/swapfile snorkle [0] /usr/sbin/swap -l swapfile dev swaplo blocks free /dev/dsk/c1t0d0s1 32,1 8 2313352 2313352 /dev/dsk/c1t3d0s0 32,256 8 1038328 1038328 /opt/swapfile - 8 1048568 1048568To retain the freshly added swap space through a system reboot, add
'/opt/swapfile' to /etc/vfstab as seen below:
snorkle [0] /usr/bin/grep swap /etc/vfstab /dev/dsk/c1t0d0s1 - - swap - no - /dev/dsk/c1t3d0s0 - - swap - no - swap - /tmp tmpfs - yes - /opt/swapfile - - swap - no -Should you need to remove swap space provided by a disk slice or swap
file, 'swap' is again used:
snorkle [0] /usr/sbin/swap -d /dev/dsk/c1t3d0s0 snorkle [0] /usr/sbin/swap -d /opt/swapfile snorkle [0] /usr/sbin/swap -l swapfile dev swaplo blocks free /dev/dsk/c1t0d0s1 32,1 8 2313352 2313352Of note, only swap space that isn't in use can be removed.
see also:
Adding Swap Space in FreeBSD
Adding Swap Space in Linux