[Ovirt-devel] [PATCH node] fix /var/log persistence

Alan Pevec apevec at redhat.com
Tue Feb 24 01:14:57 UTC 2009


copy initial logs from tmpfs to HostVG/Logging
use lsof to find services with opened logfiles

Signed-off-by: Alan Pevec <apevec at redhat.com>
---
 scripts/ovirt-functions |   42 +++++++++++++++++++++++++++++++++++++-----
 1 files changed, 37 insertions(+), 5 deletions(-)

diff --git a/scripts/ovirt-functions b/scripts/ovirt-functions
index 5385843..ba11856 100755
--- a/scripts/ovirt-functions
+++ b/scripts/ovirt-functions
@@ -277,7 +277,23 @@ mount_config() {
     fi
 }
 
+# stop any service which keeps /var/log busy
+# keep the list of services
+unmount_logging_services() {
+    # mapping command->service is lame, but works for most initscripts
+    services=
+    cd /etc/init.d
+    for prg in $(lsof -Fc +D /var/log|grep ^c|sort -u); do
+        srv=$(grep -l ${prg#c}$ *)
+        service $srv stop
+        services="$services $srv"
+    done
+    # debugging help
+    lsof +D /var/log
+}
+
 # mount logging partition
+# this only gets executed when disk is re-partitioned, HostVG/Logging is empty
 mount_logging() {
     if grep -q " /var/log ext3" /proc/mounts; then
         return 0
@@ -286,11 +302,21 @@ mount_logging() {
     if [ -e /dev/HostVG/Logging ] ; then
         log "Mounting log partition"
 
-        mount /dev/HostVG/Logging /var/log
+        # temporary mount-point
+        mkdir -p /var/log2
+        mount /dev/HostVG/Logging /var/log2
+        unmount_logging_services
+        # save logs from tmpfs
+        cp -av /var/log/* /var/log2
         # save temporary log
-        cp /tmp/ovirt.log /var/log/ovirt.log-tmp
+        if [ -e /tmp/ovirt.log ]; then
+            cp /tmp/ovirt.log /var/log2/ovirt.log-tmp
+        fi
+        mount --move /var/log2 /var/log
         restorecon -rv /var/log
-        service rsyslog restart
+        for srv in $services; do
+            service $srv start
+        done
 
         return 0
     else
@@ -306,13 +332,19 @@ unmount_logging() {
     fi
 
     log "Unmounting log partition"
-    service rsyslog stop
     # plymouthd keeps /var/log/boot.log
     plymouth --quit
     plymouth --wait
+    unmount_logging_services
 
     umount /var/log
-    service rsyslog start
+    rc=$?
+    if [ $rc -ne 0 ]; then
+        return $rc
+    fi
+    for srv in $services; do
+        service $srv start
+    done
 
     return 0
 }
-- 
1.6.0.6




More information about the ovirt-devel mailing list