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