ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ#!/usr/bin/perl # Comprueba si los mounts están en sólo lectura. open FILE, "/proc/mounts" or die $!; $num_args = $#ARGV + 1; if ($num_args != 1) { print "\nEl comando requiere un argumento.\nPara comprobar todos los puntos introducir: all.\n"; exit 1; } my @checklist= split(/,/, $ARGV[0]); my $warning=0; my $critical=0; my @ro; my @errorBlock; while () { my @line = split(/ /); my @rw=split(/,/,$line[3]); if($checklist[0] eq "all" || grep { $_ eq $line[1] } @checklist){ # Compruebo si hay algo en sólo lectura: if($rw[0] eq "ro"){ $warning=1; # Activo el aviso de que hay cosas en sólo lectura. push @ro, "$line[1]"; } # Si no está en sólo lectura compruebo si se puede escribir: else{ # Comprobar que dentro de $line[1] (es el path del punto de montado) se puede escribir y borrar. my $name =sprintf "FileSystemTest_%d", time; my $filename; if($line[1] eq "/"){ # Si el punto es / le llamo /FileSystemTest_UNIXtimestamp $filename= "$line[1]$name"; }else{ # Si no es /, le llamo /path_al_punto_de_montado/FileSystemTest_UNIXtimestamp $filename= "$line[1]/$name"; } my @dirs=split(/\//,$line[1]); if($dirs[1] eq "sys" || $dirs[1] eq "proc" || ($dirs[1] eq "dev" && $dirs[2] eq "pts")){ # Me salto esos casos porque son FS virtual y no se puede escribir ahí: # /sys # /proc # /dev/pts }else{ my $abierto= open FH, ">", $filename or ($critical=2 and push @errorBlock, "No se puede escribir en $line[1] : $!"); if($abierto){ close FH; unlink $filename or ($critical=2 and push @errorBlock, "No se puede borrar $filename : $!"); } } } } } # Si algo está roto lo muestro: if($critical){ print "CRITICAL: Imposible escritura en bloques RW:\n"; my $i; for $i (@errorBlock) { print $i, "\n"; } } # Si ha habido algo en sólo lectura lo muestro: if($warning){ print "\nWARNING: hay bloques montados en sólo lectura:\n"; my $j; for $j (@ro) { print $j, "\n"; } } print "OK: Es posible escribir en los FS: @checklist\n" if (not $critical and not $warning); exit ($critical or $warning);