Mailinglisten-Archive |
Hallo,
ich glaube, ich habs jetzt. OK, es ist alles ein ziemlicher Hack...
folgende Restore-Funktion wird aufgerufen:
function restore_partition($device, $path, $filename) {
if(!file_exists($path."/".$filename)) {
die("\nfile error\n");
}
if(!file_exists("/dev/".$device)) {
die("\ndevice error\n");
}
echo "\nProceed? (yes / no)\n";
while( ($selection3 != "yes") && ($selection3 != "no") )
{
fscanf(STDIN, "%s", $selection3);
}
if(strstr($selection3, "no")) die("\naborting\n");
echo "\n\nPlease stand by until the process is finnished.\n\n";
system("nohup dd if=".$path."/".$filename." bs=16065 2>/dev/null |
gunzip -c 2>/dev/null | mbuffer 2>/dev/null | dd bs=16065
of=/dev/".$device." 2>/dev/null >/dev/null &");
}
Der Vorgang wird im Hintergrund gestartet und mbuffer zeigt immer schön
die aktuellen Transferraten an.
In der .bashrc steht folgendes:
trap '' 2
~/rescue.php
PID=`pidof dd | awk '{print $1}'`
while ps -p $PID >/dev/null ; do
sleep 1
done
echo ""
echo "Restore seems so be successful."
echo ""
logout
Der Nutzer kann den Prozess nicht abbrechen und wird danach ausgeloggt.
Sinn davon ist, dass er keine Root-Rechte benötigt (dd ist suid) und nur
machen kann, was das Menü im PHP-Skript ihm bietet.
Gruss, Andreas
php::bar PHP Wiki - Listenarchive