Why I can't create a hard link from device file in other than /dev directory?
When I wanted to create a hard link in my /home
directory in root mode, Linux showed the following error message:
ln: failed to create hard link ‘my_sdb’ => ‘/dev/sda1’: Invalid cross-device link
The above error message is shown below:
# cd /home/user/
# ln /dev/sda1 my_sdb
But I could only create a hard link in the /dev
directory, and it was not possible in other directories.
Now, I want to know how to create a hard link from an existing device file (like sdb1
) in /home
directory (or other directories) ?
linux hard-link ln
add a comment |
When I wanted to create a hard link in my /home
directory in root mode, Linux showed the following error message:
ln: failed to create hard link ‘my_sdb’ => ‘/dev/sda1’: Invalid cross-device link
The above error message is shown below:
# cd /home/user/
# ln /dev/sda1 my_sdb
But I could only create a hard link in the /dev
directory, and it was not possible in other directories.
Now, I want to know how to create a hard link from an existing device file (like sdb1
) in /home
directory (or other directories) ?
linux hard-link ln
add a comment |
When I wanted to create a hard link in my /home
directory in root mode, Linux showed the following error message:
ln: failed to create hard link ‘my_sdb’ => ‘/dev/sda1’: Invalid cross-device link
The above error message is shown below:
# cd /home/user/
# ln /dev/sda1 my_sdb
But I could only create a hard link in the /dev
directory, and it was not possible in other directories.
Now, I want to know how to create a hard link from an existing device file (like sdb1
) in /home
directory (or other directories) ?
linux hard-link ln
When I wanted to create a hard link in my /home
directory in root mode, Linux showed the following error message:
ln: failed to create hard link ‘my_sdb’ => ‘/dev/sda1’: Invalid cross-device link
The above error message is shown below:
# cd /home/user/
# ln /dev/sda1 my_sdb
But I could only create a hard link in the /dev
directory, and it was not possible in other directories.
Now, I want to know how to create a hard link from an existing device file (like sdb1
) in /home
directory (or other directories) ?
linux hard-link ln
linux hard-link ln
edited Mar 29 at 20:13
Michael
1476
1476
asked Mar 29 at 10:46
Reza Harasani
17210
17210
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
But I could only create a hard link in the /dev directory and it was not possible in other directories.
As shown by the error message, it is not possible to create a hard link across different filesystems; you can create only soft (symbolic) links.
For instance, if your /home
is in a different partition than your root partition, you won't be able to hard link /tmp/foo
to /home/user/
.
Now, as @RichardNeumann pointed out, /dev
is usually mounted as a devtmpfs filesystem. See this example:
[dr01@centos7 ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/centos_centos7-root 46110724 3792836 42317888 9% /
devtmpfs 4063180 0 4063180 0% /dev
tmpfs 4078924 0 4078924 0% /dev/shm
tmpfs 4078924 9148 4069776 1% /run
tmpfs 4078924 0 4078924 0% /sys/fs/cgroup
/dev/sda1 1038336 202684 835652 20% /boot
tmpfs 815788 28 815760 1% /run/user/1000
Therefore you can only create hard links to files in /dev
within /dev
.
3
The partition is not the issue. It is, as you stated the cross-filesystem limitation./dev
is usually mounted as adevtmpfs
filesystem. Thus you can only create hardlinks to files in/dev
within/dev
. You e.g. cannot even create hardlinks to/dev/null
within/dev/pts
, because it is mounted withdevpts
as a different file system.
– Richard Neumann
Mar 29 at 11:20
1
@RichardNeumann Good point. I corrected my answer which was only partly correct.
– dr01
Mar 29 at 12:20
add a comment |
A hard link cannot be used to achieve what you want, because hard links do not work between file systems.
However, you can achieve what you want with the mknod
command.
Run
ls -l /dev/devicefile
. You should see an output like this:
crw-rw-rw- 1 root root 1, 9 Mar 29 15:46 /dev/urandom
- Take note of the number in the size column (
1, 9
). - Run the command
mknod /path/to/destination c 1 9
(substituting the values you want).
Why does this work?
Device files are effectively hard links to an abstract file implemented by the kernel or kernel drivers. Whilst you can't create hard links to file system objects from another file system, these aren't file system objects and so, by knowing their major and minor reference numbers, you can create a reference to them from any file system.
It does not work on some kernels other than Linux, of course.
– JdeBP
Mar 29 at 18:55
add a comment |
Hard links just create another entry in a directory, pointing to a file (where file is a file like thing, such as a directory). Therefore hard-links can not reference a file in another file-system.
Soft-links are you friend in this case. Use ln -s
. Softlinks can go across filesystems, and can even point to something that is not there.
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f434278%2fwhy-i-cant-create-a-hard-link-from-device-file-in-other-than-dev-directory%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
But I could only create a hard link in the /dev directory and it was not possible in other directories.
As shown by the error message, it is not possible to create a hard link across different filesystems; you can create only soft (symbolic) links.
For instance, if your /home
is in a different partition than your root partition, you won't be able to hard link /tmp/foo
to /home/user/
.
Now, as @RichardNeumann pointed out, /dev
is usually mounted as a devtmpfs filesystem. See this example:
[dr01@centos7 ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/centos_centos7-root 46110724 3792836 42317888 9% /
devtmpfs 4063180 0 4063180 0% /dev
tmpfs 4078924 0 4078924 0% /dev/shm
tmpfs 4078924 9148 4069776 1% /run
tmpfs 4078924 0 4078924 0% /sys/fs/cgroup
/dev/sda1 1038336 202684 835652 20% /boot
tmpfs 815788 28 815760 1% /run/user/1000
Therefore you can only create hard links to files in /dev
within /dev
.
3
The partition is not the issue. It is, as you stated the cross-filesystem limitation./dev
is usually mounted as adevtmpfs
filesystem. Thus you can only create hardlinks to files in/dev
within/dev
. You e.g. cannot even create hardlinks to/dev/null
within/dev/pts
, because it is mounted withdevpts
as a different file system.
– Richard Neumann
Mar 29 at 11:20
1
@RichardNeumann Good point. I corrected my answer which was only partly correct.
– dr01
Mar 29 at 12:20
add a comment |
But I could only create a hard link in the /dev directory and it was not possible in other directories.
As shown by the error message, it is not possible to create a hard link across different filesystems; you can create only soft (symbolic) links.
For instance, if your /home
is in a different partition than your root partition, you won't be able to hard link /tmp/foo
to /home/user/
.
Now, as @RichardNeumann pointed out, /dev
is usually mounted as a devtmpfs filesystem. See this example:
[dr01@centos7 ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/centos_centos7-root 46110724 3792836 42317888 9% /
devtmpfs 4063180 0 4063180 0% /dev
tmpfs 4078924 0 4078924 0% /dev/shm
tmpfs 4078924 9148 4069776 1% /run
tmpfs 4078924 0 4078924 0% /sys/fs/cgroup
/dev/sda1 1038336 202684 835652 20% /boot
tmpfs 815788 28 815760 1% /run/user/1000
Therefore you can only create hard links to files in /dev
within /dev
.
3
The partition is not the issue. It is, as you stated the cross-filesystem limitation./dev
is usually mounted as adevtmpfs
filesystem. Thus you can only create hardlinks to files in/dev
within/dev
. You e.g. cannot even create hardlinks to/dev/null
within/dev/pts
, because it is mounted withdevpts
as a different file system.
– Richard Neumann
Mar 29 at 11:20
1
@RichardNeumann Good point. I corrected my answer which was only partly correct.
– dr01
Mar 29 at 12:20
add a comment |
But I could only create a hard link in the /dev directory and it was not possible in other directories.
As shown by the error message, it is not possible to create a hard link across different filesystems; you can create only soft (symbolic) links.
For instance, if your /home
is in a different partition than your root partition, you won't be able to hard link /tmp/foo
to /home/user/
.
Now, as @RichardNeumann pointed out, /dev
is usually mounted as a devtmpfs filesystem. See this example:
[dr01@centos7 ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/centos_centos7-root 46110724 3792836 42317888 9% /
devtmpfs 4063180 0 4063180 0% /dev
tmpfs 4078924 0 4078924 0% /dev/shm
tmpfs 4078924 9148 4069776 1% /run
tmpfs 4078924 0 4078924 0% /sys/fs/cgroup
/dev/sda1 1038336 202684 835652 20% /boot
tmpfs 815788 28 815760 1% /run/user/1000
Therefore you can only create hard links to files in /dev
within /dev
.
But I could only create a hard link in the /dev directory and it was not possible in other directories.
As shown by the error message, it is not possible to create a hard link across different filesystems; you can create only soft (symbolic) links.
For instance, if your /home
is in a different partition than your root partition, you won't be able to hard link /tmp/foo
to /home/user/
.
Now, as @RichardNeumann pointed out, /dev
is usually mounted as a devtmpfs filesystem. See this example:
[dr01@centos7 ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/centos_centos7-root 46110724 3792836 42317888 9% /
devtmpfs 4063180 0 4063180 0% /dev
tmpfs 4078924 0 4078924 0% /dev/shm
tmpfs 4078924 9148 4069776 1% /run
tmpfs 4078924 0 4078924 0% /sys/fs/cgroup
/dev/sda1 1038336 202684 835652 20% /boot
tmpfs 815788 28 815760 1% /run/user/1000
Therefore you can only create hard links to files in /dev
within /dev
.
edited Mar 29 at 12:19
answered Mar 29 at 10:52
dr01
15.9k114970
15.9k114970
3
The partition is not the issue. It is, as you stated the cross-filesystem limitation./dev
is usually mounted as adevtmpfs
filesystem. Thus you can only create hardlinks to files in/dev
within/dev
. You e.g. cannot even create hardlinks to/dev/null
within/dev/pts
, because it is mounted withdevpts
as a different file system.
– Richard Neumann
Mar 29 at 11:20
1
@RichardNeumann Good point. I corrected my answer which was only partly correct.
– dr01
Mar 29 at 12:20
add a comment |
3
The partition is not the issue. It is, as you stated the cross-filesystem limitation./dev
is usually mounted as adevtmpfs
filesystem. Thus you can only create hardlinks to files in/dev
within/dev
. You e.g. cannot even create hardlinks to/dev/null
within/dev/pts
, because it is mounted withdevpts
as a different file system.
– Richard Neumann
Mar 29 at 11:20
1
@RichardNeumann Good point. I corrected my answer which was only partly correct.
– dr01
Mar 29 at 12:20
3
3
The partition is not the issue. It is, as you stated the cross-filesystem limitation.
/dev
is usually mounted as a devtmpfs
filesystem. Thus you can only create hardlinks to files in /dev
within /dev
. You e.g. cannot even create hardlinks to /dev/null
within /dev/pts
, because it is mounted with devpts
as a different file system.– Richard Neumann
Mar 29 at 11:20
The partition is not the issue. It is, as you stated the cross-filesystem limitation.
/dev
is usually mounted as a devtmpfs
filesystem. Thus you can only create hardlinks to files in /dev
within /dev
. You e.g. cannot even create hardlinks to /dev/null
within /dev/pts
, because it is mounted with devpts
as a different file system.– Richard Neumann
Mar 29 at 11:20
1
1
@RichardNeumann Good point. I corrected my answer which was only partly correct.
– dr01
Mar 29 at 12:20
@RichardNeumann Good point. I corrected my answer which was only partly correct.
– dr01
Mar 29 at 12:20
add a comment |
A hard link cannot be used to achieve what you want, because hard links do not work between file systems.
However, you can achieve what you want with the mknod
command.
Run
ls -l /dev/devicefile
. You should see an output like this:
crw-rw-rw- 1 root root 1, 9 Mar 29 15:46 /dev/urandom
- Take note of the number in the size column (
1, 9
). - Run the command
mknod /path/to/destination c 1 9
(substituting the values you want).
Why does this work?
Device files are effectively hard links to an abstract file implemented by the kernel or kernel drivers. Whilst you can't create hard links to file system objects from another file system, these aren't file system objects and so, by knowing their major and minor reference numbers, you can create a reference to them from any file system.
It does not work on some kernels other than Linux, of course.
– JdeBP
Mar 29 at 18:55
add a comment |
A hard link cannot be used to achieve what you want, because hard links do not work between file systems.
However, you can achieve what you want with the mknod
command.
Run
ls -l /dev/devicefile
. You should see an output like this:
crw-rw-rw- 1 root root 1, 9 Mar 29 15:46 /dev/urandom
- Take note of the number in the size column (
1, 9
). - Run the command
mknod /path/to/destination c 1 9
(substituting the values you want).
Why does this work?
Device files are effectively hard links to an abstract file implemented by the kernel or kernel drivers. Whilst you can't create hard links to file system objects from another file system, these aren't file system objects and so, by knowing their major and minor reference numbers, you can create a reference to them from any file system.
It does not work on some kernels other than Linux, of course.
– JdeBP
Mar 29 at 18:55
add a comment |
A hard link cannot be used to achieve what you want, because hard links do not work between file systems.
However, you can achieve what you want with the mknod
command.
Run
ls -l /dev/devicefile
. You should see an output like this:
crw-rw-rw- 1 root root 1, 9 Mar 29 15:46 /dev/urandom
- Take note of the number in the size column (
1, 9
). - Run the command
mknod /path/to/destination c 1 9
(substituting the values you want).
Why does this work?
Device files are effectively hard links to an abstract file implemented by the kernel or kernel drivers. Whilst you can't create hard links to file system objects from another file system, these aren't file system objects and so, by knowing their major and minor reference numbers, you can create a reference to them from any file system.
A hard link cannot be used to achieve what you want, because hard links do not work between file systems.
However, you can achieve what you want with the mknod
command.
Run
ls -l /dev/devicefile
. You should see an output like this:
crw-rw-rw- 1 root root 1, 9 Mar 29 15:46 /dev/urandom
- Take note of the number in the size column (
1, 9
). - Run the command
mknod /path/to/destination c 1 9
(substituting the values you want).
Why does this work?
Device files are effectively hard links to an abstract file implemented by the kernel or kernel drivers. Whilst you can't create hard links to file system objects from another file system, these aren't file system objects and so, by knowing their major and minor reference numbers, you can create a reference to them from any file system.
edited 7 mins ago
answered Mar 29 at 16:09
wizzwizz4
283112
283112
It does not work on some kernels other than Linux, of course.
– JdeBP
Mar 29 at 18:55
add a comment |
It does not work on some kernels other than Linux, of course.
– JdeBP
Mar 29 at 18:55
It does not work on some kernels other than Linux, of course.
– JdeBP
Mar 29 at 18:55
It does not work on some kernels other than Linux, of course.
– JdeBP
Mar 29 at 18:55
add a comment |
Hard links just create another entry in a directory, pointing to a file (where file is a file like thing, such as a directory). Therefore hard-links can not reference a file in another file-system.
Soft-links are you friend in this case. Use ln -s
. Softlinks can go across filesystems, and can even point to something that is not there.
add a comment |
Hard links just create another entry in a directory, pointing to a file (where file is a file like thing, such as a directory). Therefore hard-links can not reference a file in another file-system.
Soft-links are you friend in this case. Use ln -s
. Softlinks can go across filesystems, and can even point to something that is not there.
add a comment |
Hard links just create another entry in a directory, pointing to a file (where file is a file like thing, such as a directory). Therefore hard-links can not reference a file in another file-system.
Soft-links are you friend in this case. Use ln -s
. Softlinks can go across filesystems, and can even point to something that is not there.
Hard links just create another entry in a directory, pointing to a file (where file is a file like thing, such as a directory). Therefore hard-links can not reference a file in another file-system.
Soft-links are you friend in this case. Use ln -s
. Softlinks can go across filesystems, and can even point to something that is not there.
answered Mar 29 at 12:31
ctrl-alt-delor
10.7k41957
10.7k41957
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f434278%2fwhy-i-cant-create-a-hard-link-from-device-file-in-other-than-dev-directory%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown