La máquina EC2 en aws está llena de múltiples encabezados de Linux y actualmente / está 100 % lleno en el espacio del disco. Ejecuté comandos como apt-get autoremove pero arroja un error que dice
No apport report written because the error message indicates a disk full error dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)¿Puedo eliminar los encabezados antiguos con el comando rm? ¿Es seguro? y si elimino con el comando rm, ¿debería hacer alguna limpieza después de eso? Aquí está la lista de encabezados:
du -h -d1 /usr/src/ | sort -hr 2.8G /usr/src/ 106M /usr/src/linux-aws-headers-4.4.0-1099 106M /usr/src/linux-aws-headers-4.4.0-1098 106M /usr/src/linux-aws-headers-4.4.0-1096 106M /usr/src/linux-aws-headers-4.4.0-1095 106M /usr/src/linux-aws-headers-4.4.0-1094 106M /usr/src/linux-aws-headers-4.4.0-1092 106M /usr/src/linux-aws-headers-4.4.0-1090 106M /usr/src/linux-aws-headers-4.4.0-1088 106M /usr/src/linux-aws-headers-4.4.0-1087 106M /usr/src/linux-aws-headers-4.4.0-1085 106M /usr/src/linux-aws-headers-4.4.0-1084 106M /usr/src/linux-aws-headers-4.4.0-1083 106M /usr/src/linux-aws-headers-4.4.0-1079 106M /usr/src/linux-aws-headers-4.4.0-1077 106M /usr/src/linux-aws-headers-4.4.0-1075 106M /usr/src/linux-aws-headers-4.4.0-1074 106M /usr/src/linux-aws-headers-4.4.0-1072 106M /usr/src/linux-aws-headers-4.4.0-1070 106M /usr/src/linux-aws-headers-4.4.0-1069 106M /usr/src/linux-aws-headers-4.4.0-1066 106M /usr/src/linux-aws-headers-4.4.0-1065 106M /usr/src/linux-aws-headers-4.4.0-1062 106M /usr/src/linux-aws-headers-4.4.0-1061 106M /usr/src/linux-aws-headers-4.4.0-1060 13M /usr/src/linux-headers-4.4.0-1100-aws 13M /usr/src/linux-headers-4.4.0-1099-aws 13M /usr/src/linux-headers-4.4.0-1098-aws 13M /usr/src/linux-headers-4.4.0-1096-aws 13M /usr/src/linux-headers-4.4.0-1095-aws 13M /usr/src/linux-headers-4.4.0-1094-aws 13M /usr/src/linux-headers-4.4.0-1092-aws 13M /usr/src/linux-headers-4.4.0-1090-aws 13M /usr/src/linux-headers-4.4.0-1088-aws 13M /usr/src/linux-headers-4.4.0-1087-aws 13M /usr/src/linux-headers-4.4.0-1085-aws 13M /usr/src/linux-headers-4.4.0-1084-aws 13M /usr/src/linux-headers-4.4.0-1083-aws 13M /usr/src/linux-headers-4.4.0-1079-aws 13M /usr/src/linux-headers-4.4.0-1077-aws 13M /usr/src/linux-headers-4.4.0-1075-aws 13M /usr/src/linux-headers-4.4.0-1074-aws 13M /usr/src/linux-headers-4.4.0-1072-aws 13M /usr/src/linux-headers-4.4.0-1070-aws 13M /usr/src/linux-headers-4.4.0-1069-aws 13M /usr/src/linux-headers-4.4.0-1066-aws 13M /usr/src/linux-headers-4.4.0-1065-aws 13M /usr/src/linux-headers-4.4.0-1062-aws 13M /usr/src/linux-headers-4.4.0-1061-aws 13M /usr/src/linux-headers-4.4.0-1060-awssalida del comando df:
df -k Filesystem 1K-blocks Used Available Use% Mounted on udev 499316 0 499316 0% /dev tmpfs 101444 10740 90704 11% /run /dev/xvda1 8065444 8049060 0 100% / tmpfs 507212 0 507212 0% /dev/shm tmpfs 5120 0 5120 0% /run/lock tmpfs 507212 0 507212 0% /sys/fs/cgroup /dev/xvdf 5029504 10244 4740732 1% /data tmpfs 101444 0 101444 0% /run/user/1000Primero reparé el estado del paquete con dpkg y apt-get -f install .
Luego traté de eliminar los núcleos antiguos como se sugiere a través apt-get autoremove .
Pero esto solo eliminaría un kernel. Allí donde muchos más instalados que encontré con
dpkg --get-selections|grep linux-modules|grep -v deinstallTuve que eliminar explícitamente esos núcleos:
apt-get remove linux-image-4.4.0-1123-aws linux-image-4.4.0-1121-aws linux-image-4.4.0-1119-aws linux-image-4.4.0-1114-aws ... linux-modules-4.4.0-1124-aws linux-modules-4.4.0-1121-aws linux-modules-4.4.0-1119-aws linux-modules-4.4.0-1114-aws ... Luego pude limpiar usando apt-get autoremove que eliminó los encabezados.
Se informaron algunas sobras, así que tuve que limpiarlas manualmente:
cd /lib/modules rm -rf 4.4.0-1124-aws 4.4.0-1123-aws 4.4.0-1122-aws 4.4.0-1121-aws4.4.0-1119-aws 4.4.0-1118-aws 4.4.0-1117-aws 4.4.0-1114-aws ... Todavía no sé por qué apt-get autoremove no funcionó para mí.
Automaticé la eliminación de los directorios innecesarios con este código de shell:
sudo apt-get autoremove cd /usr/src sudo rm -r $(comm -23 <(ls /usr/src) <(apt-file search /usr/src/* | awk -F / '{print $4}' | sort -u)) La última línea elimina todos los directorios que están presentes en ls /usr/src pero que no están presentes en una lista de archivos propios en ese directorio. El comando terminó eliminando todo menos el directorio más reciente. Antes de ejecutar de verdad, sugiero cambiar rm a echo rm para ver qué se eliminaría.
Este comando funcionó para mí:
apt-get -f autoremove Estaba recibiendo el mismo error que OP. Para poder ejecutar el comando sugerido en la respuesta de jpereira ( apt-get -f autoremove ), primero tuve que liberar unos 10 MB de espacio.
Pero cuando lo ejecuté, sucedió algo extraño donde apt-get dijo que iba a eliminar todos los paquetes linux-headers (y algunos otros), pero primero intentó instalar otro paquete ( snapd ), pero como no había espacio para instalarlo, el proceso falló.
La próxima vez que intenté ejecutar el comando, fue como si apt-get hubiera olvidado de los paquetes linux-headers (y los demás). Así que seguí adelante e intenté eliminar manualmente uno de los paquetes:
sudo apt-get remove linux-aws-headers-4.4.0-1065 Este comando eliminó con éxito 2 directorios del directorio /usr/src . Eliminó el directorio con el mismo nombre que el paquete y el paquete con el mismo nombre pero con -aws movido al final.
Para eliminarlos a todos, ejecuté este comando, PERO NO LO USE porque terminé eliminando algunos paquetes que no habrían sido eliminados por la función de eliminación automática y tampoco autoremove todos los paquetes que habrían sido eliminados por la función de autoremove . .
cd /usr/src while read pkg; do sudo apt-get -y remove $pkg; done < <(find . -maxdepth 1 -type d -name "linux*" -printf "%f\n") La solución perfecta habría sido ejecutar los siguientes comandos, pero primero debe copiar la lista de módulos que la autoremove inicialmente dijo que iba a eliminar:
echo "<PASTE COPIED LIST OF PACKAGES HERE>" | cut -c3- | tr " " "\n"Asegúrese de que el resultado de ese comando sea una lista de los paquetes donde cada paquete está en una línea. Si eso funciona, continúe y ejecute algo similar al comando que usé antes:
while read pkg; do sudo apt-get -y remove $pkg; done < <(echo "<PASTE COPIED LIST OF PACKAGES HERE>" | cut -c3- | tr " " "\n") Ejecutar la solución recomendada (después de ejecutar la no recomendada) también fue bueno para mí porque eliminó algunos paquetes linux-image y linux-modules que también ocupaban mucho espacio, ¡pero en otro lugar!
El primer comando (no recomendado) liberó alrededor de 3,7 G de espacio y el segundo (recomendado) liberó 1,7 G adicionales. Sin embargo, si primero ejecuta el comando recomendado, ese comando por sí solo debería liberar todo el espacio que debe liberarse.
Para eliminar encabezados de Linux de forma segura, siempre use:
$ sudo apt-get autoremoveA veces, el comando anterior puede dar un error como este:
Reading package lists... Error! E: Could not create temporary file for /var/cache... (28: No space left on device) E: The package lists or status file could not be parsed or opened. En este caso, elimine manualmente uno o dos encabezados antiguos. Para hacer esto, primero vaya a la carpeta /usr/src y enumere los archivos según la fecha (el más antiguo al último) usando el siguiente comando:
$ cd /usr/src $ ls -lt Luego elija un encabezado antiguo (por ejemplo linux-aws-headers-4.4.0-1067 ) y elimínelo con este comando:
$ sudo rm -r linux-aws-headers-4.4.0-1067 Después de hacer esto, el comando sudo apt-get autoremove debería funcionar sin ningún problema.