NTFS bağlantıları - NTFS links

NTFS dosya sistemi, örneğin dosya ve klasörleri yeniden yönlendirmek için başka bir dosya ya da içeriği ile bir dosya noktayı çeşitli yollar tanımlar. İşaret edilen nesneye hedef denir. Üç bağlantı sınıfı vardır:

  • Aynı dosya sistemindeaynı MFT girişini ( inode )paylaşan dosyaları olan sabit bağlantılar .
  • Sabit bağlantılara benzeyen ancak klasörler için tanımlanmış bağlantı noktaları . Yalnızca yerel, mutlak yolları kabul eder.
  • Bağlantıların içeriğinin göstermesi gereken başka bir dosyanın yolunu kaydeden sembolik bağlantılar . Göreceli yolları kabul edebilir. NTFS 3.1'dedizin ve UNC yolları desteğieklendi.

Tüm NTFS bağlantıları, uygulamalara şeffaf olacak şekilde tasarlanmıştır. Bu, bir bağlantıya erişen uygulamanın dosya sistemi sürücüsü tarafından sorunsuz bir şekilde yeniden yönlendirileceği ve özel bir işleme gerek olmadığı anlamına gelir. Kullanıcılara normal dizinler veya dosyalar olarak görünürler. Bu aynı zamanda bir takma etkisine de yol açar : bir bağlantıya yazma işlemi, yazma işlemini temel alınan, bağlantılı dosyaya veya MFT girişine iletir.

İşaret ettikleri yol da dahil olmak üzere ek verileri taşıması gereken sembolik bağlantılar ve bağlantı noktaları, NTFS yeniden ayrıştırma noktalarına dayanır . Yol kaydı yapıları, diğer birimlerdeki dosyalara ve hatta uzak dosyalara bağlanabilecekleri anlamına gelir. Öte yandan, sabit bağlantılar, MFT'de bir girdiye üstlenilmesi için yeni bir dosya adı verilerek oluşturulur, bu nedenle aynı dosya sistemindeki dosyalarla sınırlıdır.

NTFS sembolik bağlantısı, normal bir dosya olan Windows kısayol dosyası ile aynı değildir . İkincisi herhangi bir dosya sisteminde oluşturulabilir (önceki FAT32 gibi ), meta veriler içerebilir (örneğin, Windows Gezgini'nde kısayol görüntülendiğinde görüntülenecek bir simge ) ve uygulamalar için şeffaf değildir.

Tarih

Bağlantı noktaları ve bağlama noktaları olarak adlandırılan dizinlere veya birimlere sembolik bağlantılar, Windows 2000 ile birlikte gelen NTFS 3.0 ile tanıtıldı. NTFS 3.1'den itibaren, herhangi bir dosya sistemi nesnesi için sembolik bağlantılar oluşturulabilir. NTFS 3.1, Windows XP ile birlikte tanıtıldı , ancak işlevsellik (ntfs.sys aracılığıyla) kullanıcı modu uygulamalarına sunulmadı. senableAncak, özelliğin kullanıcı modunda da kullanılabilmesi için Masatoshi Kimura'nın açık kaynak sürücüsü gibi üçüncü taraf filtre sürücüleri kurulabilir. Windows Vista ile birlikte yayınlanan ntfs.sys , işlevselliği varsayılan olarak kullanıcı modu uygulamaları için kullanılabilir hale getirdi.

NTFS 3.1'den beri, sembolik bir bağlantı bir dosyaya veya uzak SMB ağ yoluna da işaret edebilir . NTFS bağlantı noktaları yerel sürücülerde yalnızca mutlak yolları desteklerken, NTFS sembolik bağlantıları göreli yolları kullanarak bağlantıya izin verir. Ayrıca, NTFS sembolik bağlantı uygulaması, dosya sistemleri arası bağlantılar için tam destek sağlar. Bununla birlikte, ana bilgisayarlar arası sembolik bağlantıları etkinleştiren işlevsellik, uzak sistemin de bunları desteklemesini gerektirir ve bu da bunların Windows Vista ve sonraki Windows işletim sistemlerine desteğini etkin bir şekilde sınırlar.

Kısıtlamalar ve dezavantajlar

Windows Vista/ Windows 7'deki varsayılan güvenlik ayarları, yükseltilmiş olmayan yöneticilerin ve tüm yönetici olmayanların sembolik bağlantılar oluşturmasına izin vermez, ancak kavşaklar oluşturmaz. Bu davranış, Yerel Güvenlik İlkesi yönetim konsolunda "secpol.msc" çalıştırılarak değiştirilebilir (altında: Güvenlik Ayarları\Yerel İlkeler\Kullanıcı Hakları Ataması\Sembolik bağlantılar oluşturun). Bu başlatarak çalışılan cmd.exe'yi ile yönetici olarak çalıştır seçenek veya runaskomutla. Windows 10 Insiders build 14972'den başlayarak, Windows "Geliştirici Modunda" yükseltilmiş yönetici ayrıcalıkları gereksinimi kaldırılarak, konsolu yönetici olarak yükseltmeye gerek kalmadan sembolik bağlantıların oluşturulmasına izin verildi. API düzeyinde, SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATEbu amaç için bir bayrak sağlanır.

Birleştirilebilir olmayan dosyalar

Ne Windows NT başlatma işlemi ne de Windows Vista başlatma işlemi Bağlantı noktalarını desteklemez, bu nedenle belirli sistem klasörlerini yeniden yönlendirmek imkansızdır:

  • \Pencereler
  • \Windows\System32
  • \Windows\Yapılandırma

Ancak kritik olmayan klasörleri yeniden yönlendirmek mümkündür:

  • \Kullanıcılar
  • \Belgeler ve Ayarlar
  • \Program dosyaları
  • \Program Dosyaları (x86)

\Users ve \ProgramData için başka bir sürücüyü işaret eden bağlantıların oluşturulması, güncellemeleri ve Windows Mağazası Uygulamalarını bozduğu için önerilmez.

\Users, \ProgramData, "\Program Files" veya "\Program Files (x86)" için diğer konumlara işaret eden bağlantıların oluşturulması, Windows'un yüklenmesini veya yükseltilmesini engeller.

"\Program Files" veya "\Program Files (x86)" için başka bir sürücüyü işaret eden bağlantıların oluşturulması, dosyaları kendi deposundaki \Windows\SxS kurulum dizinine sabitleyen Windows Bileşen Tabanlı Hizmetini bozar.

kullanım örnekleri

Yerleşik kullanımlar

  • Windows Bileşen Deposu ( WinSxS ) , sabit disk sürücüsünde depolanan DLL'lerin farklı sürümlerini takip etmek için sabit bağlantılar kullanır .
  • Sembolik bağlantılar, \Users\All Users\ -> \ProgramData\yeniden yönlendirme için Windows Server 2008'dedir (temel kurulumda).

Program yönlendirme

Bir yazılım parçasının belirli bir sürümünü içeren bir dizine işaret eden bir bağlantı noktası ayarlayarak, yazılımın başka bir sürümünü eklemek ve bağlantı noktasını istenen sürüme yönlendirmek mümkün olabilir.

Disk alanından tasarruf

Bir bağlantının içeriği neredeyse hiç disk alanı kullanmaz (sadece orijinal dizine işaret ederler). Büyük bir dizine birden fazla giriş noktasına ihtiyacınız varsa, bağlantı noktaları bu amaca iyi hizmet edecektir. Kavşaklar sadece orijinali gösterdiğinden, bağlantı noktaları bir şeyin kopyasıyla karıştırılmamalıdır . Dizinlerin ayrı ayrı değiştirilmesi gerekiyorsa, dizin veya içindeki dosyaların ayrı bir kopyasını sağlamadığı için bir bağlantı kullanılamaz.

Benzer şekilde, sembolik bağlantılar ve sabit bağlantılar, tek tek dosyaların içeriklerini birleştirmek için kullanışlıdır.

Önceden tanımlanmış yolları atlama

Windows'u yeniden yüklemek (veya yeni bir sürüm yüklemek) genellikle C: sürücüsünün içeriğinin silinmesini gerektirdiğinden , yükleme sırasında yalnızca bir bölümün silinmesi gerektiğinden birden çok bölüm oluşturmak avantajlıdır . Ancak bazı programlar, farklı bir sürücüye kurulu olsalar bile kullanıcının kurulum dizinini seçmesine veya bazı dosyalarını C: sürücüsüne yüklemesine izin vermez. Bir bağlantı noktası oluşturarak, program kandırılarak farklı bir dizine kurulabilir.

Ertelenmiş hedef geçersiz kılma tehlikeleri

Aşağıdakilerden biri olan sabit bağlantı şemalarının kullanımında önemli tehlikeler gizlenir:

  • X:\path\to\parentya X:\path\da işaret eden sabit bağlantı oluşturmak gibi kendi üst klasörlerine başvuran bağlantılar içerir X:\path\to\veya
  • gibi hacimli sürücü harfleri kullanarak hedeflerini belirlemek X:de, X:\some\path\.

İlk durumdaki sorun, dizin yapısında sonsuz özyineleme anlamına gelen özyinelemeli yollar oluşturmasıdır. Evresel katılmasıyla, bir veya daha fazla dizin birleşimleri varlığı basit bir dosya sisteminin yapısını değiştiren uygun ağaç bir içine yönlendirilmiş grafik ancak yinelemeli bağlama daha da karmaşıklaştınr grafik teorik karakterinden asiklik , siklik için. Aynı dosya ve dizinlerle artık birden çok yoldan karşılaşılabildiğinden, yeniden girişli veya özyinelemeli yapıları saf bir şekilde geçen uygulamalar yanlış veya tutarsız sonuçlar verebilir veya hiçbir zaman sona ermeyebilir. Daha da kötüsü, özyinelemeli olarak siliniyorsa , bu tür programlar o anda geçiş yaptığı dizinin bir üst öğesini silmeye çalışabilir.

Yukarıda listelenen koşulların her ikisinin C:de varsayılan Windows kurulumunda sürücüde kurulan sabit bağlantılar sisteminde bulunduğunu unutmayın. Örneğin, her Windows 10 yüklemesi özyinelemeli yolu tanımlar:

C:\ProgramData\
C:\ProgramData\Application Data\
C:\ProgramData\Application Data\Application Data\
C:\ProgramData\Application Data\Application Data\Application Data\
C:\ProgramData\Application Data\Application Data\Application Data\Application Data\
C:\ProgramData\Application Data\Application Data\Application Data\Application Data\Application Data\ ...

Bu görünüşte sonsuz kümedeki her ek yol adı, aynı konuma atıfta bulunan gerçek bir geçerli Windows yoludur. Pratikte, yol adları 260 karakterlik DOS yol sınırı (veya daha yeni 32.767 karakter sınırı) ile sınırlıdır, ancak kısaltma, eksik veya geçersiz yol ve dosya adlarına neden olabilir. Bir Windows kurulumunun bir kopyası, dizin bağlantıları bozulmadan, aynı veya daha kötüsü başka bir bilgisayardaki başka bir birime arşivlendiğinde, arşivlenen kopya, çalışan kurulumdan etkin klasörler içerebilir. Örneğin, kopyalama için kullanılan yönteme bağlı olarak, bir Windows sürücüsünün yedek kopyası , geçerli, etkin kurulumda hala klasörü işaret eden X:\archive\...bir sabit bağlantı adı verilen bir sabit bağlantı içerecektir . X:\archive\Users\USERNAME\My DocumentsC:\Users\USERNAME\Documents\

İkinci tür ertelenmiş hedef yanlış yönlendirme, kavramsal olarak daha basit olmakla birlikte, daha ciddi sonuçlara yol açabilir. Birim sürücü harfi yolu adlarını kullanan sabit bağlantılar içeren kendi kendine tutarlı bir birim veya dizin yapısı kopyalandığında veya başka bir birime taşındığında (veya bir birimin sürücü harfi başka bir yolla yeniden atandığında), bu tür bağlantılar artık kopyalanan yapıdaki ilgili hedefe . Yine sonuçlar kopyalama için kullanılan yazılıma bağlıdır; Bazı programlar, yapısal tutarlılığı korumak için kopyadaki tam olarak kapsanan sabit bağlantıları değiştirerek araya girebilirken, diğerleri içeriklerini kopyalayarak yok sayabilir, tam olarak kopyalayabilir ve hatta sabit bağlantılara geçebilir.

Sabit bağlantılar, yeni kopyada, hala kaynak birimdeki orijinal dosya ve klasörlere işaret eden birimler arası sabit bağlantılar olacak şekilde tam olarak kopyalanırsa ciddi sorunlar ortaya çıkar. Bir "arşiv" klasöründeki (sürücü harfine göre) hala orijinal birimdeki konumlara işaret eden sabit bağlantılar gibi kasıtsız birimler arası sabit bağlantılar, gerçekleşmeyi bekleyen felaketlerdir. Örneğin, kullanılmayan bir yedekleme biriminde çok daha sonra kullanılmayan bir arşiv dizini olduğu varsayılanın silinmesi, mevcut, aktif kullanıcı verilerinin veya sistem dosyalarının silinmesine neden olabilir.

Sürücü harfi tehlikesi için önleyici bir önlem, bir dizin bağlantısı için hedef yolu belirtirken birim sürücü harflerini içeren yollar yerine birim GUID yolu sözdizimini kullanmaktır. Örneğin, X:\Some\Other\Pathat için bir takma ad oluşturmayı düşünün X:\Some\Path\Foo:

X:\Some\Path>linkd Foo X:\Some\Other\Path

Yukarıda açıklandığı gibi, ortaya çıkan bağlantıyı içeren klasör yapısı, dışında bir sürücü harfine sahip bir diske taşınırsa X:veya harf sürücünün X:kendisinde değiştirilirse , hedef konumdaki veri içeriği yanlışlıkla bozulmaya veya kötü niyetli kötüye kullanıma karşı savunmasızdır. . Bu bağlantının daha esnek bir sürümü, hedef birime GUID tanımlayıcı değeriyle ( fsutil volume listkomut çalıştırılarak keşfedilebilir ) başvurarak bu riski kısmen azaltabilir .

X:\Some\Path>linkd Foo \\?\Volume{12345678-abcd-1234--abcdefghijkl}\Some\Other\Path

Bunu yapmak, sürücü harfinin X:herhangi bir şekilde değiştirilmesi durumunda bağlantının geçerli kalmasını sağlar .

Dizin bağlantı felaketlerinden kaçınmanın proaktif bir yöntemine gelince, komut dir /AL /S /B "X:\Some\Path", herhangi bir geri dönüşü olmayan dosya sistemi değişikliği yapmadan önce dikkatli bir analiz için, belirli bir dosya sistemi konumunun "altındaki" tüm sabit bağlantıların bir listesini elde etmek için kullanılabilir. Tanım olarak, sonuç listesindeki her bağlantı ile başlayan bir yol adı X:\Some\Path\olsa da, bu sabit bağlantılardan herhangi biri tarafından kapsanmayan bir hedef içeriyorsa X:\Some\Path, belirtilen kapsamdan kaçılmıştır ve belirttiğiniz başlangıç ​​dizini tam değildir. kapsıyor. Belirtilen dizin, diğer fiziksel birimlerde bulunan veya kendi ana-geçişinden köke geçişi belirtilen dizini içermeyen dosya ve dizinleri içerdiğinden, bu durumda ekstra dikkat gösterilebilir.

Komut satırı araçları

Windows, NTFS bağlantıları oluşturabilen ve değiştirebilen çeşitli araçlarla birlikte gelir.

  • PowerShell :New-Item bir cmdlet Windows PowerShell boş dosyaları, klasörleri kavşaklar ve sabit bağlantılar oluşturabilirsiniz. PowerShell 5.0 ve sonraki sürümlerinde sembolik bağlantılar da oluşturabilir. Get-ItemVeGet-ChildItemdavranırlar sorguya dosya sistemi nesneleri için kullanılır ve bunlar NTFS bağlantılar ise, onlar hakkında bilgi bulabilirsiniz edilebilir. BuRemove-Itemcmdlet'in düzgün çalışmasını engelleyen bir hata kaydı olmasına rağmen, cmdlet söz konusu öğeleri kaldırabilir.
  • Windows Komut İstemi : Windows Vista ve Windows Server 2008'den başlayarak,mklinkdahili komut kavşaklar, sabit bağlantılar ve sembolik bağlantılar oluşturabilir. Bu komut availbale da ReactOS . Ek olarak, saygıdeğerdirkomut,/aLanahtararacılığıyla bağlantı noktalarını görüntüleyebilir ve filtreleyebilir. Son olarak,rdkomut ( olarak da bilinirrmdir) bağlantı noktalarını silebilir.
  • fsutil.exe: Windows 2000 ile birlikte sunulan bir komut satırı yardımcı programı . Onun hardlinkalt komutu bir dosya ile ilişkili sabit bağlantıları veya liste sabit bağlantıları yapabilirsiniz. Başka bir alt komut, yeniden ayrıştırma noktalarını , bağlantı noktalarını oluşturan dosya sistemi nesnelerini, sabit bağlantıları ve sembolik bağlantıları reparsepointsorgulayabilir veya silebilir .

Ayrıca, aşağıdaki yardımcı programlar, Windows ile birlikte gelmeseler bile NTFS bağlantıları oluşturabilir.

  • linkd: Windows 2000 ve Windows Server 2003 için Kaynak Seti'nin bir bileşenidir . Bağlantı noktaları yapabilir.
  • kavşak: Microsoft'tan ücretsiz bir komut satırı yardımcı programıdır, kavşaklar oluşturabilir veya silebilir.
  • PowerShell Topluluk Uzantıları (PSCX): Microsoft PowerShell Galerisi'nde barındırılan bu modül, NTFS bağlantılarıyla uğraşmak için birkaç cmdlet ekler: New-Hardlink, New-Junction, Get-ReparsePoint, Remove-ReparsePoint ve New-Symlink.

API'ler

Sabit bağlantılar oluşturmak için uygulamalar Windows API'sinin CreateHardLink() işlevini kullanabilir . Windows NT ailesinin tüm sürümleri, bir dosyayla ilişkili sabit bağlantıların sayısını belirlemek için kullanabilir . Bir MFT girişiyle ilişkilendirilmiş en fazla 1024 bağlantı olabilir. Benzer şekilde, CreateSymbolicLink() işlevi sembolik bağlantılar oluşturabilir. Kavşaklar oluşturmak için daha karmaşıktır. Manuel yeniden ayrıştırma noktası bilgilerinin doldurulmasını gerektirirler . libuv'da bir kod örneği bulunur . Bağlantılar yalnızca dizinler için tanımlanır: bir dosyaya işaret eden bir bağlantı oluşturduğunda API başarısız olmasa da, bağlantı daha sonra kullanıldığında başarıyla yorumlanmayacaktır. GetFileInformationByHandle()

Bağlantılar ve sembolik bağlantılar, dizinlere işaret edenler bile pNtSetInformationFile. Libuv'un unlinkWindows üzerinde uygulaması bu kullanımı göstermektedir. Alternatif olarak, .NET System.IO.Directory.Delete()yöntemi onlarda da çalışır.

Diğer özellikler

İşletim sistemi hedefin var olup olmadığını kontrol etmediğinden, sembolik bağlantılar var olmayan hedeflere işaret edebilir.

sınırlamalar

Sembolik bağlantılar açılışta çalışmaz, bu nedenle yeniden yönlendirmek imkansızdır, örneğin:

  • hiberfil.sys
  • \Pencereler
  • \Windows\system32
  • \Windows\system32\Yapılandırma

Windows Installer, sembolik bağlantıları tam olarak desteklemez. Yeniden yönlendirilen bir \Windows\Installer, çoğu .msi tabanlı Windows yükleyicisinin 2755 hatası ve/veya 1632 hatasıyla başarısız olmasına neden olur.

Bununla birlikte, yeniden yönlendirmek mümkündür:

  • \Belgeler ve Ayarlar
  • \Program verisi
  • \Program dosyaları
  • \Program Dosyaları (x86)
  • \Kullanıcılar

\Users ve \ProgramData için başka bir sürücüyü işaret eden sembolik bağlantılar oluşturmak, güncellemeleri ve Windows Mağazası Uygulamalarını bozduğu için önerilmez.

\Users, \ProgramData, "\Program Files" veya "\Program Files (x86)" için diğer konumlara işaret eden sembolik bağların oluşturulması, yüklemeyi keser. Windows'un yükseltilmesi.

"\Program Files" veya "\Program Files (x86)" için başka bir sürücüyü işaret eden sembolik bağlantılar oluşturmak, dosyaları kendi deposundaki \Windows\WinSxS kurulum dizinine sabitleyen Windows Bileşen Tabanlı Hizmeti keser .

Windows XP altında sembolik bağlantı desteği

Windows XP, sonraki sürümlerle aynı NTFS biçimi sürümünü kullandığından, içinde sembolik bağlantı desteğini etkinleştirmek mümkündür. Windows 2000 ve XP altında NTFS sembolik bağlantılarını kullanmak için, bunu kendisini bir dosya sistemi filtresi olarak yükleyerek yapan bir üçüncü taraf sürücü mevcuttur.

Ayrıca bakınız

Referanslar

Dış bağlantılar