diff options
author | Ermal LUÇI <eri@pfsense.org> | 2015-05-27 10:49:01 +0200 |
---|---|---|
committer | Ermal LUÇI <eri@pfsense.org> | 2015-05-27 10:51:38 +0200 |
commit | 427d36b4a8e32a1692ee59c0f7db3a660492f90f (patch) | |
tree | 05c0aaac4b8ba6d69b705b0e1127894ff3168a7f | |
parent | fc123231da1bd74525beddf7948ee8037c47bfe6 (diff) | |
download | pfsense-427d36b4a8e32a1692ee59c0f7db3a660492f90f.zip pfsense-427d36b4a8e32a1692ee59c0f7db3a660492f90f.tar.gz |
Ticket #4523 Major changes to how fsck is done.
Follow best practice of using fsck from FreeBSD rc.d/fsck script.
This means run preen mode first and later on try forcefully to fix issues.
Try to give as much information during boot on the status of the filesystem.
Follow best practice of using fsck from FreeBSD rc.d/fsck script.
This means run preen mode first and later on try forcefully to fix issues.
Try to give as much information during boot on the status of the filesystem.
Conflicts:
etc/inc/services.inc
-rw-r--r-- | etc/inc/services.inc | 19 | ||||
-rwxr-xr-x | etc/rc | 26 |
2 files changed, 33 insertions, 12 deletions
diff --git a/etc/inc/services.inc b/etc/inc/services.inc index c14615e..3b94885 100644 --- a/etc/inc/services.inc +++ b/etc/inc/services.inc @@ -655,14 +655,17 @@ EOPP; } $all_mac_strings[] = $dhcpifconf['mac_allow']; $all_mac_strings[] = $dhcpifconf['mac_deny']; - $all_mac_list = array_unique(explode(',', implode(',', $all_mac_strings))); - foreach ($all_mac_list as $mac) { - if (empty($mac)) - continue; - $dhcpdconf .= 'class "' . str_replace(':', '', $mac) . '" {' . "\n"; - // Skip the first octet of the MAC address - for media type, typically Ethernet ("01") and match the rest. - $dhcpdconf .= ' match if substring (hardware, 1, ' . (substr_count($mac, ':') + 1) . ') = ' . $mac . ';' . "\n"; - $dhcpdconf .= '}' . "\n"; + if (!empty($all_mac_strings)) { + $all_mac_list = array_unique(explode(',', implode(',', $all_mac_strings))); + foreach ($all_mac_list as $mac) { + if (empty($mac)) { + continue; + } + $dhcpdconf .= 'class "' . str_replace(':', '', $mac) . '" {' . "\n"; + // Skip the first octet of the MAC address - for media type, typically Ethernet ("01") and match the rest. + $dhcpdconf .= ' match if substring (hardware, 1, ' . (substr_count($mac, ':') + 1) . ') = ' . $mac . ';' . "\n"; + $dhcpdconf .= '}' . "\n"; + } } $dhcpdconf .= "subnet {$subnet} netmask {$subnetmask} {\n"; @@ -42,15 +42,33 @@ if [ -e /root/force_fsck ]; then fi if [ ! "${PLATFORM}" = "cdrom" ]; then - /sbin/fsck -y -C -F - # Mount memory file system if it exists - echo "Mounting filesystems..." + /sbin/fsck -p -F + FSCK_ACTION_NEEDED=0 + case $? in + 0) + echo "Filesystems are clean, continuing..." + echo "Mounting filesystems..." + ;; + 8) + echo "Preen mode recommended running a check that will be performed now." + FSCK_ACTION_NEEDED=1 + ;; + *) + echo "Stopping boot is recommended due to filesystem manual action needed, nevertheless it will be tried to repair the filesystem." + FSCK_ACTION_NEEDED=1 + ;; + esac + + if [ ${FSCK_ACTION_NEEDED} = 1 ]; then + echo "WARNING: Trying to recover filesystem from inconsistency..." + /sbin/fsck -yF + fi /sbin/mount -a 2>/dev/null mount_rc=$? attempts=0 while [ ${mount_rc} -ne 0 -a ${attempts} -lt 3 ]; do - /sbin/fsck -yF / + /sbin/fsck -yF /sbin/mount -a 2>/dev/null mount_rc=$? attempts=$((attempts+1)) |