Lesson 6: Boot and the Filesystem Hierarchy¶
Note
- grub, filesystem stuff based roughly on Frostsnow’s talk
- basics of kernel and differences between virtualization/physical (the picture that kevin draws)
The Linux Filesystem Hierarchy¶
Note
Based on Wade’s talk https://github.com/clinew/presentation_filesystems/blob/master/presentation.tex
What’s a filesystem?
In computing, a file system is used to control how information is stored and retrieved. Without a file system, information placed in a storage area would be one large body of information with no way to tell where one piece of information stops and the next begins.
Filesystem can mean:¶
- How the system’s files are arranged on the disk
- How the disk actually holds the files
- FAT and NTFS are old but Windows-compatible
- ext3 is standard, ext4 is newer, xfs has fancier journaling
- journaling tracks changes before write
- sysadmins will encounter NFS and its competitors like Gluster
Note
Moving from Windows?
- Binaries, not executables.
- Directories, not folders.
- Read, not load.
- Symbolic links, not shortcuts.
- Write, not save.
The File System¶
$ ls
bin etc initrd.img.old lost+found opt run srv usr
boot home lib media proc sbin sys var
dev initrd.img lib64 mnt root selinux tmp vmlinuz
Installed programs and utilities¶
/bin /usr/sbin
/sbin /usr/local/bin
/usr/bin /usr/local/sbin
- PATH environment variable
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- which command
$ which bash
/bin/bash
User-Specific Data & Configuration¶
- Data stored at /home/<username>
- Desktop environment creates folders Documents, Pictures, Videos, etc.
Configurations in dotfiles within home (/.)
- Lost+Found is not your desktop trash can
- Lost blocks of the filesystem.
- Usually not an issue.
- If your desktop provides backups of deleted files, they’ll be somewhere in /home/<username>/
Where are drives mounted?¶
- Raw device appears under /dev.
$ dmesg | tail
[260930.208715] sdb: sdb1
[260930.320756] sd 6:0:0:0: >[sdb] Asking for cache data failed
[260930.320765] sd 6:0:0:0: >[sdb] Assuming drive cache: write through
[260930.320771] sd 6:0:0:0: >[sdb] Attached SCSI removable disk
USB filesystem under /media, main disk /
- You can manually mount devices with mount
- “Everything’s a file”
- umount to unmount
/etc/fstab tells things where to mount
/etc/mtab shows where things are currently mounted
Space on drives¶
- Use df to see disk free space.
$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/sda8 73G 29G 41G 42% /
- Use du to see disk usage.
$ du -sh /home/
21G /home/
- Default output is in bytes, -h for human-readable output.
Three Tiers of Filesystem Hierarchy¶
/, essential for system booting and mounting /usr.
/usr, read-only system data for normal system operation.
- /usr/local, locally-installed software.
- Package managers usually install under / and /usr.
Common Directories¶
Directory | Contents |
---|---|
/bin | Binary files |
/include | Header files for C/C++ programs |
/lib | Libraries |
/sbin | Binary files for root (superuser) |
/boot | Files essential for booting kernel, initramfs |
/dev | Virtual filesystem, exports hardware devices |
/etc | System-wide configurations |
/home | Individual users’ data |
/media | Removable storage devices |
/mnt | Like media – place to mount disks and things |
Common Directories¶
Directory | Contents |
---|---|
/opt | “Add-on application software packages” |
/proc | Virtual filesystem exporting system data |
/root | homedir for root |
/run | Volatile information accumulated since boot |
/sys | Virtual filesystem exporting kernel objects |
/tmp | Temporary files |
/var | Data which varies – logs, mail, etc. |
/usr/share | Architecture-independent, read-only data |
/usr/src | Kernel source code |
/proc has lots of useful system information¶
Which Linux kernel version are you running?
$ cat /proc/version
Linux version 3.5.0-17-generic (buildd@allspice) (gcc version 4.7.2
(Ubuntu/Linaro 4.7.2-2ubuntu1) ) #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012
Learn about system’s hardware
$ less /proc/cpuinfo
$ less /proc/meminfo
Some parts of /proc can be written as well as read...
$ echo 3 > /proc/sys/vm/drop_caches # drop caches
Commands for working with filesystems¶
Creating filesystems
$ mkfs
Mounting filesystems
$ mount
# -t for type
# -o for options
# requires device path and mount point
Loopback devices
$ losetup
$ /dev/loop*
# makes it look like a device instead of a file
devfs¶
sd*
sr*
/dev/null
/dev/random
/dev/urandom
/dev/zero
Blocks and dd¶
Block size is the size of chunks allocated for files
- dd
- Disk duplicator (or disk dump).
- if=<path>, input file.
- of=<path>, ooutput file.
- bs=<size>, block size.
- count=<size>, number of block to transfer.
$ dd if=/dev/random of=/dev/sda
# What will this do?
Filesystem Consistency¶
- Metadata vs. data
- Metadata is extra information the filesystem tracks about the file
- Data is the file’s contents
- Filesystem is consistent if all metadata is intact
- fsck is FileSystem Consistency Check
More about Journaling¶
Filesystem consistency tool; protections against system freezes, power outages, etc.
Replaying the journal.
ext3’s three modes of journaling:
journal: Data and metadata to journal. ordered: Data updates to filesystem, then metadata committed to journal. writeback: Metadata comitted to journal, possibly before data updates.
Bootstrapping¶
Note
kernel loaded into memory, initialization tasks, and available to users
- Init
- kernel spawns init which is always PID 1
- controls the boot process
- can be a simple script to a binary
- Pull itself up by its own bootstraps
- Automatic and manual booting
- Driver Loading
- Period of vulnerability
- configuration errors
- missing hardware
- damaged filesystems
- init – Always Process ID (PID) #1
- First process to start
- Either a binary or can be a simple script (even a bash shell!)
Steps in boot process¶
Note
- Kernel
- 1st stage – bootloader, 2nd, boot the kernel
- boot from boot loader
- load into memory
- located in /boot/ on Linux
- Hardware config
- locate & initialize hardware
- print out what it does
- System processes
- init, kswapd, pdflush, etc
- init only real process
- Others look like processes for scheduling (appear as [kswapd] with ps)
- Kernel initialization
- Hardware configuration
- System processes
- Operator intervention (single-user)
- Execution of start-up scripts
- Multi-user operation
Booting¶
Note
- On hardware specific to UNIX (i.e. Sun)
- firmware knows how to use devices
- talk to the network
- understand filesystems
- all accessible via the commandline
- BIOS smarter than they used to be
- Not standardized
- Most servers support PXE
- PCs vs Proprietary hardware
- BIOS, UEFI, OpenBoot PROM, etc
- BIOS
- Basic Input/Output System
- Very simple compared to OpenBoot PROM / UEFI
- Select devices to boot from
- MBR (first 512 bytes)
- UEFI
- Unified Extensible Firmware Interface
- Successor to BIOS
- Flexible pre-OS environment including network booting
Boot Loaders (Grub)¶
Note
- Grub
- next generation PC boot loader
- no need to “re-run grub” config updates
- Grub config
- disks are index based from zero
- grub install commands
- netboot, pretty, serial
- device.map, grub.conf
- robust with weird disk geometry
- Grand Unified Bootloader
- Dynamic fixes during booting
- Can read the filesystem
- Index based – (hd0,0) = sda1
- Grub “version 1” vs. “version 2”
- Version 2 has more features, but more complicated
- Latest Debian, Ubuntu and Fedora use v2
grub> root (hd0,0) (Specify where your /boot partition resides)
grub> setup (hd0) (Install GRUB in the MBR)
grub> quit (Exit the GRUB shell)
grub-install
Single User Mode¶
Note
- Show on VM
- enter grub, hit ESC, pick kernel, hit “e” for edit
- use arrows
Typically ask for root password
- What is it used for?
- Troubleshoot problems
- Manual Filesystem Checks
- Booting with bare services
- Fix boot problems
- Add “single” to kernel option
- Solaris/BSD
- boot -s
Startup Script Tasks¶
Note
Verbose and print out description of what its doing.
Old days were to manually adjust scripts, not anymore. Most are configurable now.
- Setting up hostname & timezone
- Checking disks with fsck
- Mounting system’s disks
- Configuring network interfaces
- Starting up daemons & network services
System-V Boot Style¶
Note
- System-V Most common today
- Show system changing between different run levels.
- Slightly different between Distros
- Linux derived from System-V originally
- Alternative init systems
- systemd - Fedora 15+, Redhat 7+ and Debian* (dependency driven)
- upstart - Ubuntu, Redhat 6 (event driven, faster boot times)
Run levels:
level 0 | sys is completely down (halt) |
level 1 or S | single-user mode |
level 2 through 5 | multi-user levels |
level 6 | reboot level |
/etc/inittab¶
Note
Look at inittab
- Tells init what to do on each level
- Starts getty (terminals, serial console)
- Commands to be run or kept running
- inittab not used with systemd or upstart
# The default runlevel.
id:2:initdefault:
# What to do in single-user mode.
~~:S:wait:/sbin/sulogin
# What to do when CTRL-ALT-DEL is pressed.
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
# terminals
1:2345:respawn:/sbin/getty 38400 tty1
T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
init.d Scripts¶
Note
- sshd init script
- case statement
- functions
- chkconfig
- One script for one service/daemon
- Start up services such as sshd, httpd, etc
- Commands
- start, stop, reload, restart
- sshd init script
$ service sshd status
openssh-daemon (pid 1186) is running...
$ service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
Starting services on boot¶
Note
Show sshd script show list, adding, removing, enabling, disabling
- rclevel.d (rc0.d, rc1.d)
- S = start, K = stop/kill
- Numbers to set sequence (S55sshd)
- chkconfig / update-rc.d
- Easy way to enable/disable services in RH/Debian
- Other distributions work differently
$ chkconfig --list sshd
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
$ chkconfig sshd off
$ chkconfig --list sshd
sshd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
Configuring init.d Scripts¶
Note
show sendmail & network config examples for CentOS
/etc/defaults seems to be more common between UNIX’s
- /etc/sysconfig (RH) or /etc/defaults (Debian)
- source Bash scripts
- Daemon arguments
- Networking settings
- Other distributions are vastly different
$ cat /etc/sysconfig/ntpd
# Drop root to id 'ntp:ntp' by default.
OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid -g"
Shutting Down¶
Note
Modern systems are less touchy with hard resets, but still need to be careful. Only for emergencies.
Shutdown -h
- Not Windows, don’t reboot to fix issue
- Can take a long time (i.e. servers)
- Reboot only to
- load new kernel
- new hardware
- system-wide configuration changes
- shutdown, reboot, halt, init
- wall - send system-wide message to all users
$ wall hello world
Broadcast message from root@devops-bootcamp (pts/0) (Fri Jan 31 00:40:29 2014):
hello world