Error Messages¶
Real error text seen on Linux servers, with its cause and first fix. Search this page for the words of an error; the linked topic explains the mechanism and shows the captured output. Entries are added as each module is written.
Foundations¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
# No SMBIOS nor DMI entry point found, sorry. | The VM or container exposes no SMBIOS table | Use lscpu, lsmem, lspci, or the cloud metadata service | System Information |
ls: cannot access '/nonexistent': No such file or directory | A system call returned ENOENT | Check the path; strace -e trace=file shows what was tried | Architecture |
not a dynamic executable | Static binary, script or other architecture | file <path> | Architecture |
Shell and CLI¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
bash: toool: command not found (exit 127) | No alias, function, builtin or PATH entry has that name | Check spelling, PATH, and the owning package | Command Resolution |
bash: ./tool: No such file or directory | The file is not in the current directory | ls -l ./tool | Command Resolution |
bash: /home/.../app: No such file or directory for a command that exists | Bash hashed the command's old location | hash -r | Command Resolution |
cannot execute: required file not found | The interpreter in the shebang, or the ELF loader, is missing; often CRLF line endings | file <path> shows CRLF terminators; strip them with sed -i 's/\r$//' | Command Resolution |
bash: /home/laborant/tool.sh: Permission denied (exit 126) | No execute bit, or a noexec mount | chmod +x, or bash <file> | Command Resolution |
./check.sh: 3: [[: not found | Bash syntax run by dash (/bin/sh on Ubuntu) | #!/bin/bash | Shell Basics |
not a tty | A command that needs a terminal runs from cron, systemd or CI | Remove prompts, or ssh -t | Shell Basics |
No manual entry for bash | Documentation excluded at install (tsflags=nodocs, minimized image) | Re-enable docs, reinstall, mandb | Getting Help |
sudo: mytool: command not found | sudo uses secure_path, which lacks the tool's directory | Full path, or extend secure_path | Variables and Environment |
warning: setlocale: LC_ALL: cannot change locale | The requested locale is not installed, often forwarded by SSH | Install the locale or unset the variable | Locale and Encoding |
ls: cannot access 'report': No such file or directory for a file named report 2026.txt | Unquoted variable split on spaces | Quote: "$file" | Quoting and Expansion |
/etc/demo2.conf: Permission denied after sudo echo ... > | The redirection runs as the calling user | Pipe into sudo tee | Streams and Redirection |
log.txt: cannot overwrite existing file | noclobber is set | Append with >>, or use the forced-overwrite operator shown in the topic | Streams and Redirection |
$logfile: ambiguous redirect | Unquoted target variable is empty or has spaces | Quote and set it | Streams and Redirection |
Killed (exit 137) | SIGKILL, often the OOM killer | dmesg -T, journalctl -k | Exit Codes and Chaining |
mkdir: cannot create directory ...: File exists | The directory exists, so the && chain stops | mkdir -p | Exit Codes and Chaining |
[: =: unary operator expected | Unquoted empty variable inside [ ] | Quote it or use [[ ]] | Scripting Essentials |
syntax error: unexpected end of file | Missing fi, done, esac or quote | bash -n script.sh | Scripting Essentials |
Files and Filesystem¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
No space left on device with free space in df -h | Inodes exhausted, or a different filesystem is full | df -i <path>, df -h <path> | Inodes and Links |
Disk full, du finds much less | Deleted files still open | sudo lsof +L1 | Inodes and Links |
dpkg-query: no path found matching pattern /etc/ssh/sshd_config | File created by a maintainer script | Query the directory instead | Filesystem Hierarchy |
cannot execute binary file: Exec format error | Binary for another architecture | Download the build for uname -m | File Types |
syntax error near unexpected token when running a downloaded binary | An HTML error page was saved as the binary | file <path>; download with curl -f | File Types |
/dev/vda: Permission denied | A device node was run as a command | Use lsblk or fdisk -l | File Types |
mkdir: cannot create directory 'a/b/c': No such file or directory | Parent directory missing | mkdir -p | File Operations |
cp: -r not specified; omitting directory 'app' | Source is a directory | cp -r or cp -a | File Operations |
rmdir: failed to remove 'app': Directory not empty | rmdir removes empty directories only | Check contents, then rm -r | File Operations |
curl: (22) The requested URL returned error: 404 | HTTP error with curl -f | Check the URL; the script stops as intended | File Operations |
ln: failed to create hard link ...: Invalid cross-device link | Hard links cannot span filesystems | ln -s or copy | Inodes and Links |
ln: ...: hard link not allowed for directory | Directories cannot have extra hard links | Symlink or bind mount | Inodes and Links |
[Errno 24] Too many open files | Per-process descriptor limit reached | Check for leaks; raise LimitNOFILE= | File Descriptors |
bash: line 1: 3: Bad file descriptor | Redirection to a descriptor that is not open | exec 3> file first | File Descriptors |
find: ‘/root’: Permission denied | No read access to a directory | sudo, or 2>/dev/null | Finding Files |
find: paths must precede expression | Unquoted -name pattern expanded by the shell | Quote the pattern | Finding Files |
find: missing argument to -exec | -exec not terminated | End with {} \; or {} + | Finding Files |
tar: Refusing to read archive contents from terminal (missing -f option?) | -f missing | tar -xf <archive> | Archiving and Compression |
gzip: stdin: not in gzip format | Not a gzip file, often an HTML page | file <archive>; tar -xf without -z | Archiving and Compression |
tar: nosuch: Not found in archive | Member path differs from the stored path | tar -tf for the exact name | Archiving and Compression |
tar: Removing leading `/' from member names | Informational: absolute paths stored as relative | None; use -C / to avoid the message | Archiving and Compression |
Text Processing¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
sha256sum: WARNING: 1 computed checksum did NOT match | File changed or download corrupt | Download again; do not use the file | Viewing and Comparing |
gzip: plain.gz: not in gzip format | zcat given data that is not gzip | file <path>; use the matching tool | Viewing and Comparing |
tail: '/tmp/app.log' has become inaccessible | The followed log was rotated away | Normal with tail -F; it reopens the new file | Viewing and Comparing |
grep: /usr/bin/ls: binary file matches | Input contains NUL bytes | grep -a, or strings first | grep and Regex |
grep: Invalid regular expression | Unbalanced bracket or brace | Escape it or use grep -F | grep and Regex |
sed: -e expression #1, char 5: unterminated `s' command | Missing final delimiter or an unescaped / | Close the command or change the delimiter | sed |
sed: no input files | sed -i used in a pipeline | Pass a file name, or drop -i | sed |
unescaped newline inside substitute pattern (macOS) | BSD sed -i took the script as the backup suffix | sed -i '' ... or GNU gsed | sed |
awk: cmd. line:1: ... unexpected newline or end of string | Unclosed brace or quote in the program | Fix the braces; keep the program in single quotes | awk |
awk: fatal: cannot open file `nosuch.log' for reading | Wrong input path | Check the path | awk |
sort: access.log:14: disorder: | Input not sorted in the current locale | Sort with the same LC_ALL before comm or join | Cut, Sort, Uniq and Tr |
bash: bc: command not found | bc not installed | Install bc, or use awk | Cut, Sort, Uniq and Tr |
rm: missing operand from an xargs pipeline | Empty input still ran the command | xargs -r | xargs and tee |
xargs: sh: exited with status 255; aborting | A command exited 255 | Return 1 for ordinary failures | xargs and tee |
xargs: argument line too long | One input item exceeds the command-line limit | Pass the data through stdin or a file | xargs and tee |
jq: parse error: Unfinished JSON term at EOF | Input is not valid JSON | Check the raw input; curl -f | JSON and YAML on the CLI |
jq: error (at ...): Cannot iterate over null (null) | .[] on a missing key | Check the path; .key[]? | JSON and YAML on the CLI |
Error: bad file '-': yaml: line 2: did not find expected key | Inconsistent YAML indentation | Align keys; yamllint | JSON and YAML on the CLI |
Users and Access¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
useradd: user 'amor' already exists | The name is taken | getent passwd amor | Users |
userdel: user amor is currently used by process 1244 | The user still has running processes | Stop them (pkill -u amor), then delete | Users |
userdel: /home/amor not owned by amor, not removing | Home directory belongs to another UID | Check ownership; remove it manually if intended | Users |
groupdel: cannot remove the primary group of user 'amor' | The group is a user's primary group | usermod -g first | Groups |
groupadd: group 'amor' already exists | Name taken, often by a user private group | getent group amor | Groups |
su: User account has expired | Account expiry date passed | chage -E -1 <user> | Passwords and Aging |
You are required to change your password immediately (administrator enforced). | chage -d 0 forced a change | Set a new password at login | Passwords and Aging |
passwd: unrecognized option '--stdin' | --stdin exists only in the RHEL build of passwd | chpasswd | Passwords and Aging |
amor is not in the sudoers file. | No sudoers rule matches the user | Add to wheel or sudo, or a drop-in rule | Sudo and Su |
sudo: a password is required | The command line does not match a NOPASSWD rule exactly | Match arguments exactly, or use sudo -l | Sudo and Su |
/etc/sudoers.d/deploy:2:48: syntax error | Invalid sudoers syntax | visudo -cf <file> before installing | Sudo and Su |
Permissions¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
chown: changing ownership of 'report.txt': Operation not permitted | Only root changes owners | sudo chown | Basic Permissions |
ls: cannot access 'd-rw/f': Permission denied with -????????? | Directory has r without x | Add x on the directory | Basic Permissions |
./run.sh: Permission denied (exit 126) | No execute bit, or noexec mount | chmod +x; findmnt -no OPTIONS -T <file> | Basic Permissions |
umask: 999: octal number out of range | Non-octal digits | Use 0 to 7 or symbolic form | umask |
rm: cannot remove '...': Operation not permitted in a shared directory | Sticky bit; the caller owns neither file nor directory | The owner removes it | Special Permissions |
rm: cannot remove 'resolv.conf': Operation not permitted as root | Immutable or append-only attribute | lsattr, then chattr -i | File Attributes |
chattr: Operation not permitted while setting flags | Only root may set i and a | sudo chattr | File Attributes |
lsattr: Operation not supported While reading flags | Filesystem without attribute support | Use ext4, XFS or btrfs | File Attributes |
setfacl: secret.conf: Operation not permitted | Only the owner or root changes an ACL | sudo setfacl | ACL |
setfacl: Option -m: Invalid argument near character 3 | Unknown user or group, or malformed entry | getent passwd <user> | ACL |
Package Management¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
Error: Unable to find a match: nosuchpackage | Wrong name or disabled repository | dnf search, dnf provides, dnf repolist --all | rpm and dnf |
Error: Failed to download metadata for repo 'broken' | One repository unreachable; dnf stops | Fix or disable it; skip_if_unavailable=True | rpm and dnf |
missing ... (Permission denied) from rpm -V | Verification run without root | sudo rpm -V | rpm and dnf |
Package hello-notes-1.0-1.el10.noarch.rpm is not signed / GPG check FAILED | Unsigned package with gpgcheck=1 | Sign it; do not disable checks | Packaging Concepts |
E: Unable to locate package nosuchpackage | Stale package lists or wrong name | sudo apt update; apt-cache search | dpkg and apt |
E: Could not get lock /var/lib/dpkg/lock-frontend | Another package process runs | Wait; DPkg::Lock::Timeout in scripts | dpkg and apt |
E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' | A previous install stopped halfway | sudo dpkg --configure -a, sudo apt -f install | dpkg and apt |
NO_PUBKEY 7EA0A9C3F273FCD8 | Keyring for a source missing or wrong | Download the key into /etc/apt/keyrings/ | Repositories |
W: Failed to fetch ... Could not resolve | APT repository unreachable; APT continues | Fix DNS or remove the source | Repositories |
error: No remote refs found for ‘flathub’ | Flatpak remote in the other scope | Add the remote to the scope in use | Flatpak and Snap |
error while loading shared libraries: libgreet.so.1 | Library missing or not in the search path | Install it or ldconfig its directory | Shared Libraries |
version `GLIBC_2.42' not found | Binary built for a newer glibc | Build on the oldest target or link statically | Shared Libraries |
cannot execute: required file not found for an ELF file | The ELF interpreter (for example musl's loader) is missing | readelf -l; build for glibc | Binary Won't Execute |
error: externally-managed-environment | Ubuntu 24.04 blocks system pip install | Use a venv or pipx | Other Install Methods |
Processes¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
bash: fork: retry: Resource temporarily unavailable | User or system process limit reached (ulimit -u, TasksMax=, pid_max) | Find the owner of the tasks; fix the leak, then the limit | Process Lifecycle |
ls: cannot read symbolic link '/proc/2102/cwd': Permission denied | The process belongs to another user | sudo, or read status instead | Process Fundamentals |
error: list of process IDs must follow -p | Empty command substitution after ps -p | Check the pgrep match first | Viewing Processes |
kill: (1) - Operation not permitted | Target belongs to another user (EPERM) | sudo, or signal as the owner | Signals |
kill: (2251) - No such process | PID gone (ESRCH); stale PID file | pgrep -a, systemctl show -p MainPID | Signals |
sleep: no process found | killall matched nothing; exits 1 | Check the name with pgrep -a | Signals |
Killed reported only after a hung write returns | SIGKILL pending on a D-state process | Fix the resource in wchan | Process States |
bash: fg: current: no such job | Empty job table in this shell | pgrep -a; the job belongs to another shell | Job Control |
nice: cannot set niceness: Permission denied | Negative nice without privilege | sudo, limits.d, or Nice= in a unit | Priority and Nice |
renice: failed to set priority for 2815 (process ID): Permission denied | User tried to lower a nice value | sudo renice | Priority and Nice |
chrt: failed to set pid 0's policy: Operation not permitted | Real-time policy needs CAP_SYS_NICE | sudo chrt, or CPUSchedulingPolicy= | Priority and Nice |
sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set ... | strace sudo drops the setuid bit | sudo strace ... | System Calls and Tracing |
Systemd and Services¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
Failed to start nginx.service: Interactive authentication required. | State change without root | sudo systemctl ... | systemctl |
Failed to start nginx.service: Unit nginx.service is masked. | Unit linked to /dev/null | sudo systemctl unmask | systemctl |
Unit nosuch.service could not be found. | Wrong name, missing package or no daemon-reload | systemctl list-unit-files, daemon-reload | systemctl |
Warning: The unit file, source configuration file or drop-ins of nginx.service changed on disk. | Edited without reloading | sudo systemctl daemon-reload | Unit Files |
Unit nginx.service has a bad unit file setting. | Parse error, often a second ExecStart= | Empty ExecStart= first; systemd-analyze verify | Unit Files |
Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing. | Drop-in added an ExecStart= without resetting | Add ExecStart= with no value before it | Unit Files |
flaky.service: Start request repeated too quickly. | Start limit reached | Fix the cause, reset-failed | Unit Files |
A dependency job for app-web.service failed. | A Requires= unit failed | systemctl list-dependencies, --failed | Unit Files |
status=203/EXEC / Failed at step EXEC spawning | ExecStart= not executable or missing | Check the path, mode, shebang, noexec | Writing a Service |
Failed to spawn 'start' task: No such file or directory | EnvironmentFile= missing | Create it, or prefix the path with - | Writing a Service |
Read-only file system inside a service | ProtectSystem=strict | ReadWritePaths= or StateDirectory= | Writing a Service |
sudo: The "no new privileges" flag is set | NoNewPrivileges=yes in the unit | Remove sudo from the service's code path | Writing a Service |
State 'stop-sigterm' timed out. Killing. | Process ignores SIGTERM longer than TimeoutStopSec= | Handle SIGTERM; exec in wrappers | Signals |
Failed to load environment files: No such file or directory | EnvironmentFile= missing; Result: resources | Create it, or prefix with - | Service Won't Start |
Failed to determine user credentials: No such process / status=217/USER | User= names no existing user | Create the user or fix the name | Service Won't Start |
OSError: [Errno 98] Address already in use | Another process owns the port | ss -tlnp "sport = :<port>" | Service Won't Start |
Logging¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
tail: cannot open '/var/log/secure' for reading: Permission denied | RHEL log files are root only; Ubuntu's need group adm | sudo, or journalctl as wheel or adm | Log Locations |
Specifying boot ID or boot offset has no effect, no persistent journal was found. | Volatile journal | Create /var/log/journal, journalctl --flush | journalctl |
No journal files were opened due to insufficient permissions. | User not in adm, systemd-journal or wheel | Add the group, log in again | journalctl |
Suppressed 4725 messages from flood.service | journald rate limit reached | Lower the log volume or raise LogRateLimitBurst= | journalctl |
rsyslogd: error during parsing file /etc/rsyslog.d/30-payments.conf, on or before line 2 | rsyslog syntax error | Fix the line, rsyslogd -N1 | rsyslog |
error: skipping "/var/log/app/app.log" because parent directory has insecure permissions | Log directory writable by a non-root group or everyone | chmod 755 the directory, or su user group in the rule | logrotate |
warning: /tmp/bad.conf:4 unknown option 'copytruncte' -- ignoring line | Misspelled logrotate directive | Correct it; logrotate -d | logrotate |
error: /tmp/dup.conf:1 duplicate log entry for /var/log/app/app.log | Two rules match one file | Keep one rule | logrotate |
Scheduling¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
"/tmp/bad.cron":1: bad minute / Invalid crontab file, can't install. | Field out of range | Correct the schedule | cron and at |
/bin/sh: -c: line 2: unexpected EOF while looking for matching `)' | Unescaped % in a crontab command | \% | cron and at |
db-backup: command not found (in CMDOUT) | Command outside cron's PATH | Full path or PATH= in the crontab | cron and at |
/bin/sh: line 1: /opt/jobs/crlf.sh: cannot execute: required file not found | CRLF line endings in the script | sed -i 's/\r$//' | cron and at |
/bin/sh: line 1: /opt/reports/run.sh: Permission denied | Script not executable | chmod 755 | Cron Job Not Running |
(CRON) bad command (/etc/cron.d/report) | cron.d line without a user field (RHEL) | Add the user | cron and at |
Error: bad username; while reading /etc/cron.d/nouser | cron.d line without a user field (Ubuntu) | Add the user | Cron Job Not Running |
You (bob) are not allowed to use this program (crontab) | cron.deny or cron.allow | Update the access files | cron and at |
(CRON) info (No MTA installed, discarding output) | Job output with no mail server (Ubuntu) | Redirect output to a file | Cron Job Not Running |
You do not have permission to use at. | at.deny or at.allow | Update the access files | cron and at |
Exec failed for mail command: No such file or directory | atd could not mail job output | Redirect output inside the job | cron and at |
Timer unit lacks value setting. Refusing. | Timer without OnCalendar= or On*Sec= | Add a trigger | Systemd Timers |
orphan.timer: Refusing to start, unit orphan.service to trigger not loaded. | No matching service | Create it or set Unit= | Systemd Timers |
Failed to parse calendar specification 'Mon..Fri 25:00': Invalid argument | Invalid calendar expression | systemd-analyze calendar | Systemd Timers |
Kernel and Hardware¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
-bash: line 1: /proc/sys/vm/swappiness: Permission denied | sudo echo ... > redirects as the user | sudo tee or sysctl -w | proc and sys |
echo: write error: Input/output error | Read-only proc file | Use the matching tunable | proc and sys |
sysctl: permission denied on key "vm.swappiness" | Not root | sudo sysctl -w | sysctl |
sysctl: setting key "vm.swappiness": Invalid argument | Non-numeric or out-of-range value | Check the valid range | sysctl |
sysctl: cannot stat /proc/sys/net/sctp/rto_min: No such file or directory | Typo, or the module is not loaded | sysctl -a --pattern; load the module | sysctl |
modprobe: FATAL: Module sctpp not found in directory /lib/modules/6.1.167 | Wrong name or missing modules for the kernel | find /lib/modules/$(uname -r); install extra modules | Kernel Modules |
rmmod: ERROR: Module sctp is in use | Use count above zero | Stop the users, or reboot | Kernel Modules |
insmod: ERROR: could not insert module ...: File exists | Already loaded | lsmod | Kernel Modules |
modprobe: FATAL: Module libcrc32c is builtin. | Built into the kernel | Parameters go on the kernel command line | Kernel Modules |
Error running install command '/bin/false' for module nbd: retcode 1 | Module blocked with install ... /bin/false | Remove the rule if the module is needed | Kernel Modules |
/tmp/99-bad.rules:1 Invalid operator for KERNEL. | = used on a udev match key | == | Devices and udev |
parse-config[4369]: segfault at 0 ip ... error 6 in parse-config[401000+1000] | NULL pointer write | coredumpctl debug | dmesg and Kernel Messages |
Memory cgroup out of memory: Killed process 4383 (python3) | cgroup memory limit reached | Raise MemoryMax= or fix the leak | dmesg and Kernel Messages |
Buffer I/O error on dev dm-0, logical block 0, async page read | Read error from the block device | Check hardware, restore from backup | dmesg and Kernel Messages |
INFO: task sh:4577 blocked for more than 10 seconds. | Task stuck in D state | Fix the device or filesystem it waits on | dmesg and Kernel Messages |
Storage¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
/dev/vda: Unable to detect device type | Virtual or hidden disk behind a controller | smartctl -d <type>, or check health on the host | Disks and Devices |
losetup: cannot find an unused loop device | All loop devices in use, or no /dev/loop-control | losetup -l; detach stale ones | Disks and Devices |
Re-reading the partition table failed.: Invalid argument | Kernel refused the whole-table re-read | partprobe or partx -a | Partitioning |
Error: /dev/loop2: unrecognised disk label | No partition table on the disk | parted -s <disk> mklabel gpt | Partitioning |
mkfs.xfs: /dev/loop0p1 appears to contain an existing filesystem (ext4). | Existing signature | Confirm the device; wipefs -a or -f | Filesystems |
Filesystem must be larger than 300MB. | xfsprogs 6.16 minimum XFS size | Use a larger device or ext4 | RAID and Encryption |
e2fsck: need terminal for interactive repairs | e2fsck -f without a terminal | -p, -y or -n | Filesystems |
dumpe2fs: Bad magic number in super-block while trying to open /dev/loop0p3 | Damaged primary superblock or another filesystem type | blkid; e2fsck -b <backup> | Filesystems |
xfs_repair: /dev/loop1p2 contains a mounted and writable filesystem | Repair attempted on a mounted XFS | Unmount first | Filesystems |
xfs_growfs: XFS_IOC_FSGROWFSDATA xfsctl failed: Invalid argument | Shrink below the last allocation group | Back up, recreate, restore | Filesystems |
mount: /srv/app: wrong fs type, bad option, bad superblock on /dev/loop0p3, missing codepage or helper program, or other error. | Wrong type, bad option, missing helper or damage | dmesg, blkid | Filesystems |
touch: cannot touch '/srv/app/test': Read-only file system | Mounted or remounted ro | findmnt -no OPTIONS; check the kernel log | Mounting and fstab |
umount: /srv/app: target is busy. | Open files, working directories or nested mounts | fuser -vm, lsof +f -- | Mounting and fstab |
mount: /srv/data: can't find UUID=683f9429-0000-4267-a91e-79c8e5787e21. | No device with that UUID | blkid; fix the line or add nofail | Mounting and fstab |
[E] unreachable on boot required source: UUID=... | findmnt --verify found a missing device | Fix fstab before rebooting | Mounting and fstab |
A dependency job for srv-data.mount failed. See 'journalctl -xe' for details. | Device did not appear before the timeout | journalctl -b; fix fstab | Mounting and fstab |
cache.mount: Where= setting doesn't match unit name. Refusing. | Mount unit named differently from its path | systemd-escape -p --suffix=mount <path> | Mounting and fstab |
mount: /srv/secure: unknown filesystem type 'crypto_LUKS'. | LUKS device mounted directly | Open it and mount /dev/mapper/<name> | RAID and Encryption |
swapon: /swapfile: skipping - it appears to have holes. | Sparse swap file | Recreate with dd or fallocate | Swap |
swapon: /swapfile: insecure permissions 0644, 0600 suggested. | World-readable swap file | chmod 600 before mkswap | Swap |
swapon: /dev/loop0p1: read swap header failed | No swap signature on the device | blkid; mkswap | Swap |
Cannot use /dev/loop0: device is partitioned | pvcreate on a partitioned disk | Use a partition or wipefs -a | LVM |
Can't open /dev/loop0p3 exclusively. Mounted filesystem? | Device is mounted or in use | Pick an unused device | LVM |
Insufficient free space: 512 extents needed, but only 258 available | Too few free extents in the VG | vgextend, or -l +100%FREE | LVM |
File system reduce is required and not supported (xfs). | lvreduce -r on XFS | Back up, recreate, restore | LVM |
fsadm: Xfs filesystem shrinking is unsupported. | Same, on LVM 2.03.16 (Ubuntu 24.04) | Back up, recreate, restore | LVM |
device-mapper: snapshots: Invalidating snapshot: Unable to allocate exception. | Snapshot ran out of space | Size snapshots for the change rate | LVM |
Aborting. Manual intervention required. | lvcreate -s on an already frozen filesystem | fsfreeze -u, lvremove, dmsetup remove | Backup and Restore |
NOCHANGE: partition 1 is size 6289375. it cannot be grown | No free space after the partition | Check lsblk; rescan the disk | Resizing and Cloud Disks |
must supply partition-number | growpart given the partition as one argument | growpart <disk> <number> | Resizing and Cloud Disks |
No space left on device | Blocks (including the reserve) or inodes exhausted | df -h, df -i, lsof -a +L1 | Disk Usage |
bash: line 1: /usr/bin/rm: Argument list too long | Glob expanded beyond the argument limit | find ... -delete | Disk Usage |
dd: error writing '/srv/web/uploads/a.bin': Disk quota exceeded | User reached the hard quota | quota -s <user> | Quotas |
rsync: [Receiver] mkdir "/backup/daily/2026-09-16" failed: No such file or directory (2) | Destination parent missing | mkdir -p or --mkpath | Backup and Restore |
Networking¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
RTNETLINK answers: File exists | Address or route already present | ip -br addr; ip addr replace | Interfaces and Addresses |
Cannot find device "eth9" | Wrong interface name | ip -br link (includes altname) | Interfaces and Addresses |
RTNETLINK answers: Operation not permitted | Changing links or routes without CAP_NET_ADMIN | Run with sudo | Interfaces and Addresses |
From 172.16.0.2 icmp_seq=1 Destination Host Unreachable | No ARP answer for the target or gateway on the local subnet | ip neigh; check VLAN and prefix | Interfaces and Addresses |
Error: Failed to modify connection 'dmz': Error checking authorization | nmcli without sudo and without polkit | Run with sudo | Network Configuration |
Error in network definition: expected sequence | netplan list written as a single value | addresses: [172.16.0.2/24] | Network Configuration |
Invalid YAML: inconsistent indentation | netplan key indented differently from its siblings | Align it; sudo netplan generate | Network Configuration |
Permissions for /etc/netplan/50-bad.yaml are too open. | netplan file readable by other users | sudo chmod 600 /etc/netplan/*.yaml | Network Configuration |
ping: connect: Network is unreachable | No route matches the destination | ip route; add the default or static route | Routing |
Error: Nexthop has invalid gateway. | via address not on a connected subnet | Use a local gateway, or onlink | Routing |
ping: connect: Invalid argument | A blackhole route matches | ip route; delete the route | Routing |
curl: (6) Could not resolve host: api.shop.internal | No nsswitch source knows the name | getent hosts, resolvectl status, dig @server | DNS Resolution |
ping: api.shop.internal: Name or service not known | Name lookup failed in getaddrinfo() | As for Could not resolve host | DNS Resolution |
;; communications error to 172.16.1.99#53: timed out | No DNS server there, or port 53 filtered | nc -vzu <server> 53; firewalls | DNS Resolution |
;; WARNING: recursion requested but not available | Authoritative-only server asked for another zone | Use a recursive resolver or a routing domain | DNS Resolution |
zone shop.internal/IN: not loaded due to errors. | Syntax error in the zone file; old data stays served | named-checkzone, fix, reload | DNS Not Resolving |
nc: connect to 172.16.1.3 port 9000 (tcp) failed: Connection refused | Nothing listens on that address, or bound to loopback | sudo ss -tlpn 'sport = :9000' on the server | Ports and Sockets |
nc: Address already in use | Port already has a listener | sudo ss -tlpn 'sport = :<port>' | Ports and Sockets |
nc: Permission denied | Unprivileged bind below port 1024 | sudo, CAP_NET_BIND_SERVICE, or a high port | Ports and Sockets |
nf_conntrack: table full, dropping packet | More tracked flows than nf_conntrack_max | Raise the limit, shorten timeouts, notrack | Sockets and TCP States |
Cannot assign requested address | Client out of ephemeral ports, often many TIME-WAIT | Reuse connections; widen ip_local_port_range | Sockets and TCP States |
ping: local error: message too long, mtu=1400 | Packet with DF set exceeds the known path MTU | Smaller packets; tracepath | Connectivity Testing |
From 172.16.0.3 icmp_seq=1 Frag needed and DF set (mtu = 1400) | A router on the path has a smaller MTU | Align MTUs; let ICMP through | Connectivity Testing |
nc: connect to 172.16.1.3 port 9200 (tcp) timed out: Operation now in progress | SYN or reply dropped on the way | Firewalls, security groups, routing | Connectivity Testing |
curl: (28) Connection timed out after 3002 milliseconds | Connection attempt dropped | Capture on the server; walk the ladder | Troubleshooting Ladder |
tcpdump: eth0: You don't have permission to perform this capture on that device | Capture without root | sudo tcpdump | Packet Capture |
tcpdump: eth9: No such device exists | Wrong interface name | tcpdump -D; -i any | Packet Capture |
tcpdump: truncated dump file; tried to read 4 file header bytes, only got 0 | Empty pcap file | Write with -U; stop with -c or Ctrl-C | Packet Capture |
hwclock: Cannot access the Hardware Clock via any known method. | VM without an RTC | Nothing; time comes from the hypervisor and NTP | Time and Timezones |
506 Cannot talk to daemon | chronyd not running | sudo systemctl enable --now chronyd | Time and Timezones |
error 9 at 0 depth lookup: certificate is not yet valid | Local clock earlier than notBefore | Fix time sync; chronyc tracking | Time and Timezones |
connect() failed (111: Connection refused) while connecting to upstream | Backend not listening | Check the backend service and bind address | Reverse Proxy and Load Balancing |
no live upstreams while connecting to upstream | Every upstream server marked failed | Fix backends; retried after fail_timeout | Reverse Proxy and Load Balancing |
Server shop_api/client is DOWN, reason: Layer4 connection problem | HAProxy health check cannot connect | Check the backend; show stat | Reverse Proxy and Load Balancing |
ping: sendmsg: Required key not available | No WireGuard peer's AllowedIPs covers the destination | Add the range to the right peer | VPN (WireGuard) |
SSH and Remote Access¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
Permission denied (publickey). | No offered key is accepted by the server | Check ssh -v and the server log; install the key or fix modes | SSH Troubleshooting |
ssh: connect to host X port 22: Connection refused | Nothing listens on the port | Start sshd; check the port with ss -tlnp | SSH Troubleshooting |
ssh: connect to host X port 22: Connection timed out | A firewall or the route drops the packets | Open the port; check routes and security groups | SSH Troubleshooting |
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! | The stored host key differs | Verify the new fingerprint, then ssh-keygen -R host | SSH Troubleshooting |
Authentication refused: bad ownership or modes for directory | Home or .ssh writable by group or others | chmod 755 ~, 700 ~/.ssh, 600 authorized_keys | SSH Troubleshooting |
Could not open user 'X' authorized keys ...: Permission denied | Wrong SELinux label on authorized_keys | restorecon -Rv ~/.ssh | SSH Troubleshooting |
Received disconnect ... 2: Too many authentication failures | The agent offered more keys than MaxAuthTries | IdentitiesOnly yes with one IdentityFile | SSH Troubleshooting |
kex_exchange_identification: read: Connection reset by peer | Server closed before key exchange (penalty, MaxStartups) | Read the server log for penalty; wait or fix the client | SSH Troubleshooting |
Your account has expired; please contact your system administrator. | Account expiry date passed | chage -E -1 user | SSH Troubleshooting |
Bad owner or permissions on /home/X/.ssh/config | Client config writable by others | chmod 600 ~/.ssh/config | SSH Client |
Bad configuration option: PasswordAuthentcation | Misspelled or unsupported sshd option | Fix the line, then sshd -t | sshd Server |
bad ownership or modes for chroot directory "..." | SFTP chroot path not root-owned or group-writable | chown root:root and chmod 755 the chroot | sshd Server |
channel N: open failed: administratively prohibited: open failed | AllowTcpForwarding no on the server | Allow forwarding, or check PermitOpen | SSH Tunnels |
bind [127.0.0.1]:PORT: Address already in use | The local forward port is taken | Free the port; use -o ExitOnForwardFailure=yes | SSH Tunnels |
scp: dest open "...": Permission denied | The remote user cannot write the destination | Copy to /tmp, then sudo install | File Transfer |
bash: line 1: rsync: command not found | rsync missing on the remote host | Install rsync, or use tar over ssh | File Transfer |
Security¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
curl: (7) Failed to connect ... Couldn't connect to server | Nothing listens, or firewalld rejected the packet | Check ss -tlnp and firewall-cmd --list-all | firewalld and ufw |
nc: connect to X port P (tcp) failed: Connection timed out | A drop rule (ufw, security group, nft drop) | Check ufw status and nft list ruleset | firewalld and ufw |
nc: connect to X port P (tcp) failed: No route to host | firewalld rejected with ICMP host-prohibited | Add the port or service to the zone | firewalld and ufw |
avc: denied { read } for ... comm="nginx" ... tcontext=...:default_t | SELinux: wrong file label | semanage fcontext -a then restorecon | SELinux |
nginx: [emerg] bind() to 0.0.0.0:PORT failed (13: Permission denied) | SELinux: port has no matching label | semanage port -a -t http_port_t -p tcp PORT | SELinux |
avc: denied { name_connect } ... comm="nginx" | SELinux boolean off (proxy to a backend) | setsebool -P httpd_can_network_connect on | SELinux |
ping: sendmsg: Operation not permitted (setcap gone) | File capability lost on copy | Reapply setcap, or grant it in the unit | Capabilities |
curl: (60) SSL certificate problem: unable to get local issuer certificate | Issuing CA not trusted, or missing intermediate | Add the CA to the trust store; serve the full chain | OpenSSL and Trust Store |
curl: (60) SSL: no alternative certificate subject name matches target host name | Requested name not in the certificate SAN | Use a listed name, or reissue with the name | OpenSSL and Trust Store |
curl: (60) SSL certificate problem: certificate has expired | Certificate expired, or the clock is wrong | Renew the certificate; fix time sync | OpenSSL and Trust Store |
Failed to restart auditd.service: Operation refused ... | auditd refuses manual restart | service auditd restart, or augenrules --load for rules | auditd |
gpg: BAD signature from ... | The signed content changed, or the wrong key | Re-download; verify the signer's key by fingerprint | GPG |
Boot and Recovery¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) | Wrong root= or an initramfs missing the root driver | Correct root=, rebuild the initramfs, or boot an older kernel | Kernel Panic |
You are in emergency mode | A filesystem in /etc/fstab failed to mount | Remount root rw, fix the entry, mount -a, reboot | Recovery |
mount: /data: can't find UUID=... | The device or UUID in /etc/fstab is wrong or absent | Correct the UUID, or add nofail for non-critical mounts | Recovery |
error: file '/vmlinuz-...' not found (GRUB) | The kernel a menu entry references was removed | Boot an older entry, reinstall the kernel, regenerate grub.cfg | GRUB2 |
edits to /etc/default/grub have no effect | grub.cfg was not regenerated after the change | Run grub2-mkconfig -o or update-grub, then reboot | GRUB2 |
Performance and Troubleshooting¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
[Errno 24] Too many open files (EMFILE) | The process hit its per-process descriptor limit | Raise LimitNOFILE (service) or limits.conf (login), or fix a leak | Limits and File Descriptors |
bash: fork: retry: Resource temporarily unavailable (EAGAIN) | RLIMIT_NPROC or pid_max exhausted | Kill the runaway with builtins; raise -u or pid_max | Cannot Fork |
Out of memory: Killed process N (name) | Memory and swap exhausted; OOM killer ran | Fix the leak or add RAM; protect a process with oom_score_adj | Memory |
container exits with code 137 and no app error | Cgroup memory limit hit; OOM-killed (128 + 9) | Raise the memory limit or reduce footprint; check dmesg | Memory |
CONFIG_TASK_DELAY_ACCT not enabled (iotop) | Per-process I/O delay accounting is off | echo 1 > /proc/sys/kernel/task_delayacct, or use pidstat -d | Disk I/O |
Command 'iostat' not found | The sysstat package is not installed | Install sysstat; vmstat/top/free work without it | Methodology |
Network Storage¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
clnt_create: RPC: Program not registered | The NFS server is not running, or a firewall blocks it | Start nfs-server; allow the nfs service (port 2049) | NFS |
mount.nfs: access denied by server while mounting | The client is not in /etc/exports, or exports not re-applied | Fix the client range; sudo exportfs -rav | NFS |
a process is stuck in D on an NFS mount, ignoring kill -9 | Hard mount with the server unreachable; uninterruptible sleep | Restore the server or network; lazy or force unmount | NFS |
mount error(13): Permission denied (CIFS) | Wrong credentials or unsupported SMB version | Check the credentials file; add vers=3.0 | Samba and CIFS |
mount error(112): Host is down (CIFS) | The server refused the requested SMB version | Specify a supported version such as vers=3.0 | Samba and CIFS |
iscsiadm: no records found | The initiator IQN is not in the target ACL, or wrong portal | Add the IQN to the ACL; rediscover the correct portal | iSCSI and NBD |
Containers¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
unshare: unshare failed: Operation not permitted | Creating the namespace needs CAP_SYS_ADMIN | Use sudo, or first unshare --user --map-root-user | Namespaces |
echo: write error: No such file or directory (cgroup file) | The controller is not enabled in the parent cgroup.subtree_control | echo +memory +cpu > <parent>/cgroup.subtree_control first | Cgroups |
container exits 137 with no application error | Cgroup OOM killer hit memory.max (128 + SIGKILL) | Raise the limit if legitimate, or fix the leak; check dmesg | Cgroups |
docker stop waits then kills the container | PID 1 does not forward SIGTERM | exec the app as PID 1, or run with --init | Containers vs VMs |
bind-mounted files are Permission denied in a container on RHEL | SELinux blocks a host mount with no matching label | Add :Z to the volume flag | Podman and Quadlet |
Virtualization and Provisioning¶
| Error | Cause | Fix | Topic |
|---|---|---|---|
virt-host-validate: hardware virtualization FAIL | No vmx/svm flag, or nested virt off; no /dev/kvm | Enable virtualization in firmware or nested virt on the host | KVM and libvirt |
error: failed to connect to the hypervisor | libvirtd not running, or user not in libvirt group | Start libvirtd; add the user to libvirt; reconnect | KVM and libvirt |
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED on a new clone | The clone reused the template's SSH host keys | Regenerate host keys (ssh-keygen -A); virt-sysprep does this | VM Images and Cloning |
| a cloned VM ignored its cloud-config | The instance-id was unchanged, so first-boot modules skipped | cloud-init clean on the template before cloning | Cloud-init and Kickstart |