Informix Error -62
-62 Too many levels of symbolic links.
An operating-system error code with the meaning shown was unexpectedly returned to the database server. The database server does not normally use symbolic links. Look for other operating-system error messages that might give more information, particularly which file or files were being accessed.
Oninit® Troubleshooting Guidance
This is an operating-system error number, not an Informix diagnosis.
The same errno is returned by many different operations, so on its own it says what the operating system refused, not what Informix was trying to do. Informix will usually have reported a more specific error alongside it — in the message log, in the SQL or ISAM error pair, or in the accompanying assert failure — and that error normally defines the real cause far more precisely than the errno does. Find it before diagnosing from this number alone.
This matters less than it used to. Later versions of the engine trap many of these conditions and report them as specific Informix errors naming the operation, the object and the context, so a bare errno in this range is increasingly a sign of an older version, an unusual code path, or a failure early in startup before the better reporting is available. If you are seeing one on a current version, the more specific error is worth looking for even harder.
Important platform note. Error codes in this range represent operating-system
errnovalues whose meanings vary between Unix platforms and versions. Confirm the nativeerrnodefinition on the server where the Informix error occurred before diagnosing the problem from the number alone.
Determine the Native Error Meaning
| Value | Symbol | |
|---|---|---|
| Catalogue text — Too many levels of symbolic links | 62 | ELOOP on BSD |
| The same condition on Linux | 40 | ELOOP |
| Errno 62 on Linux | 62 | ETIME — Timer expired; see -73 |
The BSD socket block ended at -61. From here the numbering stops tracking Linux's socket range, and this code is the first of several whose condition Linux reports at a much lower number.
python3 -c 'import os; print(40, os.strerror(40)); print(62, os.strerror(62))'
On Linux, ELOOP is errno 40, so the engine reports it as -40. That is where the material for this condition lives:
Error -40 — symlink chains, genuine loops, the per-resolution counting rule,
O_NOFOLLOW, and thenamei -lmethod that diagnoses all of them.
This page covers what is specific to the number.
The Condition, in Short
Path resolution followed more symbolic links than the kernel permits and gave up. Two situations produce it: a genuine loop, where two links point at each other, and — far more common on a long-lived server — a chain that is simply too long, accumulated over years.
The limit counts every symlink traversed while resolving one pathname, including links in directory components rather than only at the end. That is why a path with two or three visible links can exhaust a limit of forty.
A third route involves no loop and no chain at all: open() with O_NOFOLLOW returns ELOOP for any symlink, even a single healthy one. Hardened backup tools and monitoring agents do this deliberately.
All three are set out on -40.
About the Official Text
The catalogue notes that "the database server does not normally use symbolic links", and that is accurate about the engine's own behaviour — it does not create them.
It is worth reading precisely, because administrators introduce them routinely and for good reason. Pointing a chunk at /dev/disk/by-id/... through a symlink is the recommended pattern, since kernel-assigned /dev/sdX names are not stable across reboots — see -2, where a chunk symlink broken by a reboot is the classic failure. Storage layers add more: device-mapper, multipath and LVM each present symlinked names. And $INFORMIXDIR is very often a symlink for version switching, which every path derived from it then inherits.
So the engine does not create symlinks, and the paths it is given are frequently full of them. Both statements are true, and the second is the one that produces this error.
Diagnostic Checks
Confirm the symbol, which decides which page you need:
python3 -c 'import os; print(62, os.strerror(62))'
| Result | Meaning | Read |
|---|---|---|
Too many levels of symbolic links |
ELOOP — BSD or System V |
this condition, detail on -40 |
Timer expired |
ETIME — Linux errno 62 |
-73, a different condition entirely |
If it is ELOOP, the diagnosis is namei -l against the failing path, and everything else is on -40:
namei -l /path/that/failed
namei -l "$INFORMIXDIR"
readlink -f /path/that/failed
On a Linux host, expect this condition at -40 rather than here. A bare 62 on Linux that turns out to be ETIME is the -73 condition; one that is neither is worth the suspicion -33 describes.
Solutions / Resolution
- Confirm the symbol first. On Linux, errno 62 is
ETIMEand this code is not what you have. - For
ELOOP, go to -40. The chain-flattening advice, the$INFORMIXDIRcase and theO_NOFOLLOWdistinction are all there and are not repeated here. - Do not read the official text as advice to remove symlinks. It describes the engine's own behaviour. A chunk symlink to a stable device identifier exists deliberately, and removing it trades this error for the one on -2 at the next reboot.
Platform Note
| Platform | ELOOP is |
Errno 62 there means |
|---|---|---|
| Linux | errno 40 — reported as -40 | ETIME, Timer expired — see -73 |
| Solaris, AIX, HP-UX | confirm on the host | confirm on the host |
| BSD, Darwin | errno 62 | this condition |
The catalogue carries the same condition at two codes — this one from the BSD numbering, and -40 from the value Linux uses. A Linux instance will report -40; this entry exists because of the numbering the catalogue was built from.
Related Errors / Related Topics
- -40 — where this condition is reported on Linux, and where the full treatment lives: chains, loops, per-resolution counting,
O_NOFOLLOW, andnamei -l. - -2 — No such file or directory. A dangling symlink, the far more common symlink fault, and what you create by removing a chunk symlink that existed for device-name stability.
- -73 — Timer expired, which is what errno 62 means on Linux.
Where -62 appears, establish the symbol and then read -40. On a Linux host this condition does not carry this number.