Neden / dev dizini dışındaki aygıt dosyasından sabit bağlantı oluşturamıyorum?


11

Benim sert bir bağlantı oluşturmak istediğinde /homedizine kök modunda Linux aşağıdaki hata iletisini gösterdi:

ln: failed to create hard link ‘my_sdb’ => ‘/dev/sda1’: Invalid cross-device link

Yukarıdaki hata mesajı aşağıda gösterilmiştir:

# cd /home/user/
# ln /dev/sda1 my_sdb

Ancak /devdizinde yalnızca sabit bir bağlantı oluşturabiliyordum ve diğer dizinlerde mümkün değildi.

Şimdi, dizindeki (veya diğer dizinlerdeki) mevcut bir aygıt dosyasından (gibi sdb1) sabit bağlantı nasıl oluşturulacağını bilmek istiyorum /home?

Yanıtlar:


21

Ama sadece / dev dizininde sabit bir bağlantı oluşturabilir ve diğer dizinlerde mümkün değildi.

Hata mesajında ​​gösterildiği gibi, farklı dosya sistemleri arasında sabit bir bağlantı oluşturmak mümkün değildir; yalnızca yumuşak (sembolik) bağlantılar oluşturabilirsiniz.

Örneğin, /homekök bölümünüzden farklı bir bölümdeyseniz, sabit bağlantı /tmp/fookuramazsınız /home/user/.

@RichardNeumann'ın işaret ettiği gibi /dev, genellikle bir devtmpfs dosya sistemi olarak monte edilir. Bu örneğe bakın:

[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

Bu nedenle yalnızca /deviçindeki dosyalara sabit bağlantılar oluşturabilirsiniz /dev.


3
Bölüm sorun değil. Dosya sistemleri sınırlamasını belirttiğiniz gibi. /devgenellikle bir devtmpfsdosya sistemi olarak monte edilir . Böylece yalnızca /deviçindeki dosyalara hardlink oluşturabilirsiniz /dev. Örneğin farklı bir dosya sistemi olarak monte edildiği için /dev/nulliçeride hardlink oluşturamazsınız . /dev/ptsdevpts
Richard Neumann

1
@RichardNeumann İyi bir nokta. Sadece kısmen doğru olan cevabımı düzelttim.
dr_

11

Sabit bağlantılar istediğinizi elde etmek için kullanılamaz, çünkü sabit bağlantılar dosya sistemleri arasında çalışmaz.

Ancak, mknodkomut ile istediğinizi elde edebilirsiniz .

  1. Koş ls -l /dev/devicefile. Bunun gibi bir çıktı görmelisiniz:

    crw-rw-rw- 1 root root 1, 9 Mar 29 15:46 /dev/urandom
    
  2. Boyut sütunundaki ( 1, 9) sayıyı not edin .
  3. Komutu çalıştırın mknod /path/to/destination c 1 9(istediğiniz değerleri değiştirin).

Bu neden işe yarıyor?

Aygıt dosyaları, çekirdek veya çekirdek sürücüleri tarafından uygulanan soyut bir dosyaya etkin bir şekilde bağlanır. Başka bir dosya sisteminden dosya sistemi nesnelerine sabit bağlantılar oluşturamazken, bunlar dosya sistemi nesneleri değildir ve bu nedenle, büyük ve küçük referans numaralarını bilerek, herhangi bir dosya sisteminden bunlara referans oluşturabilirsiniz.



2

Sabit bağlantılar, bir dizinde bir dosyayı işaret eden başka bir girdi oluşturur (burada dosya, dizin gibi bir dosya gibidir). Bu nedenle, sabit bağlantılar başka bir dosya sistemindeki bir dosyaya başvuramaz.

Soft-linkler bu durumda arkadaşsınız. Kullanın ln -s. Yazılım bağlantıları dosya sistemlerinden geçebilir ve orada olmayan bir şeye bile işaret edebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.