ฉันจะตรวจสอบขนาดจริงที่ใช้ในไดเรกทอรี NTFS ที่มีฮาร์ดลิงก์จำนวนมากได้อย่างไร


14

บนไดรฟ์ข้อมูล Win7 NTFS ฉันใช้ cwrsync ซึ่งรองรับ --link-dest อย่างถูกต้องเพื่อสร้างการสำรองข้อมูลชนิด "snapshot" ดังนั้นฉันมี:

z:\backups\2010-11-28\cygdrive\c\Users\...
z:\backups\2010-12-02\cygdrive\c\Users\...

เนื้อหาของปี 2010-12-02 ส่วนใหญ่จะเป็นฮาร์ดลิงก์กลับไปยังไฟล์ในไดเรกทอรี 2010-11-28 แต่มีไฟล์ใหม่หรือไฟล์ที่เปลี่ยนแปลงไม่กี่ไฟล์เท่านั้นในปี 2010-12-02 บน linux ยูทิลิตี้ 'du' จะบอกขนาดที่แท้จริงของสแน็ปช็อตแต่ละส่วนที่เพิ่มขึ้นให้ฉัน ใน Windows นั้น explorer และ du ภายใต้ cygwin นั้นถูกหลอกโดย hardlinks และแสดงว่า 2010-12-02 กินเนื้อที่เพิ่มขึ้นเล็กน้อยจาก 2010-11-28

มียูทิลิตี Windows ที่จะแสดงพื้นที่ที่ถูกต้องอย่างถูกต้องหรือไม่


เครื่องมือที่กล่าวถึงสิ่งนี้จะมีประโยชน์มากในการรับภาพที่ถูกต้องของเหตุใดโฟลเดอร์ / winsxs จึงขยายใหญ่ขึ้นและทำให้เล็กลงได้ไหม และ
matt wilkie

ดูเหมือนว่าจะเป็นคำถามและคำตอบแบบไม่มีการตอบสนองสำหรับการใช้งานดิสก์ปกติ: ฉันจะแสดงภาพการใช้งานระบบไฟล์ใน Windows ได้อย่างไร
matt wilkie

คำตอบ:


11

ลองใช้Sysinternals Disk Usage (หรือรู้ว่าdu) โดยเฉพาะการใช้-uและการตั้ง-vค่าสถานะจะนับเฉพาะเหตุการณ์ที่ไม่ซ้ำกันและจะแสดงการใช้งานของแต่ละโฟลเดอร์ตามที่ปรากฏ

เท่าที่ฉันรู้ว่าระบบไฟล์ไม่ได้แสดงความแตกต่างระหว่างไฟล์ต้นฉบับและฮาร์ดลิงก์ (นั่นคือจุดฮาร์ดลิงก์) ดังนั้นคุณจึงไม่สามารถลดราคาแบบทีละโฟลเดอร์ได้ แต่ ต้องทำแบบนี้ค่อนข้าง

ในการทดสอบฉันสร้างโฟลเดอร์สุ่มโดยมี 6 ไฟล์ไว้ใน โคลนสิ่งทั้งหมด จากนั้นสร้างลิงค์แข็งและอ่อนเชื่อมโยงหลาย ๆ อันในโฟลเดอร์แรกเพื่ออ้างอิงไฟล์อื่น ๆ ในโฟลเดอร์แรกและบางลิงก์ในครั้งที่สอง

แสดงdu -u -v testFldผลลัพธ์ใน (หมายเหตุค่าถัดจากโฟลเดอร์อยู่ใน KiB):

       104  <path>\testFld\A
        54  <path>\testFld\B
       149  <path>\testFld

Totals:
Files:        12
Directories:  2
Size:         162,794 bytes
Size on disk: 162,794 bytes

แสดงdu -u -v testFld\aผลลัพธ์ใน:

104  <path>\testFld\a
...

แสดงdu -u -v testFld\bผลลัพธ์ใน:

74   <path>\testFld\b
...

สังเกตเห็นความไม่ตรงกัน?
symlink ใน A ที่อ้างถึงไฟล์ใน B จะนับเฉพาะกับ A ระหว่างการรัน "full" และ B จะคืนค่า 54 เท่านั้น (แม้ว่าไฟล์นั้นจะเป็น B และฮาร์ดลิงก์จาก A) เมื่อคุณวัด B แยกต่างหาก (หรือถ้าคุณไม่ใช้-uธงที่ไม่ซ้ำกัน) มันจะนับการวัด "เต็ม" ของ 74


1
ขอบคุณฉันไม่รู้เกี่ยวกับ sysinternals du เพียง cygwin เห็นได้ชัดว่า cygwin du ทำในสิ่งที่ฉันต้องการเช่นกันฉันไม่คิดว่าจะลองก่อนเริ่มรางวัล
kbyrd

คำตอบนี้สร้างความสับสนในการทำงานของ-uธง คุณจะได้รับการวัด "เต็ม"ถ้าคุณใช้-uธง หากไม่มีมันจะนับเพียง 1 อินสแตนซ์ของไฟล์ที่เชื่อมโยงอย่างหนัก กล่าวไว้ในเอกสาร: docs.microsoft.com/en-gb/sysinternals/downloads/duและการทดสอบตรวจสอบ
martixy

2

PowerShell 5 อาจเป็นตัวเลือก พร้อมใช้งานสำหรับ Windows 7 แต่ฉันทดสอบเฉพาะใน Server 2012 R2 ด้วยการแสดงตัวอย่างเมษายน 2558

ผู้ให้บริการระบบไฟล์ใน PowerShell 5 มีคุณสมบัติใหม่สองอย่างLinkTypeและTarget:

ls taskmgr.exe | fl LinkType,Target

ผลตอบแทนนี้:

LinkType : HardLink
Target   : C:\Windows\WinSxS\amd64_microsoft-windows-advancedtaskmanager_..._6.3.9600.17..2\Taskmgr.exe

ดังนั้นตอนนี้ฉันสามารถแสดงไฟล์ทั้งหมดใน system32 ที่ไม่ใช่ฮาร์ดลิงก์ได้เท่านั้น:

cd $env:SystemRoot\System32
ls -Recurse -File -force -ErrorAction SilentlyContinue | ? LinkType -ne HardLink | Measure-Object -Property Length -Sum

ผลตอบแทนนี้:

Count    : 844
Sum      : 502,486,831

คุณสามารถเปรียบเทียบกับไฟล์ทั้งหมด:

ls -Recurse -File -force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum

Count    : 14092
Sum      : 2,538,256,262

ดังนั้นไฟล์มากกว่า 13,000 ไฟล์ที่มี 2GB + จึงเป็นฮาร์ดลิงก์


1

TreeSize Professional (~ $ 55, ทดลอง 30 วัน) อ้างสิทธิ์เพื่อแยกพื้นที่ว่างในฮาร์ดดิสก์ของ NTFS การทดลองใช้อย่างรวดเร็วดูเหมือนว่าจะนำสิ่งนี้ออกมา

การสนับสนุน Hardlink ไม่เปิดใช้งานนอกกรอบ: ไปที่เครื่องมือ> ตัวเลือก> สแกนสแกนอีกครั้งจากนั้นใช้Ctrl-1และCtrl-2เพื่อสลับระหว่างขนาดและพื้นที่ที่จัดสรร การปันส่วนเป็นพื้นที่จริงที่ใช้ในขณะที่ขนาดเป็นสถิติที่รายงานตามปกติโดยโปรแกรมอื่น ๆ

มีโทษประสิทธิภาพสำหรับการเปิดใช้งานการสนับสนุนฮาร์ดลิงก์ (และ symlink และ mounts ด้วยหากคุณต้องการ) จานสีเป็นสีฉุนสำหรับรสนิยมของฉัน แต่ที่ดูเหมือนจะเป็นที่ตราไว้สำหรับหลักสูตรในประเภทนี้ ระวังเมื่อคลิกไปรอบ ๆ ในพื้นที่แผนภูมิกล่อง - มันง่ายต่อการย้ายโฟลเดอร์โดยไม่ตั้งใจด้วยการลากวางที่ผิดเมื่อคุณต้องการขยาย


1

ฉันคิดว่าจำเป็นต้องตั้งข้อเท็จจริงบางอย่างที่นี่

Windows ไม่สามารถ "ตรวจหา" ฮาร์ดลิงก์ได้เนื่องจากทุกไฟล์เป็นฮาร์ดลิงก์ไปยังจำนวนไบต์บนดิสก์

เครื่องมือ du ตรวจพบการซ้ำซ้อน แต่นั่นก็เป็นเท็จเช่นกันเนื่องจากหากโฟลเดอร์ A มีไฟล์และ B มีเพียงฮาร์ดลิงก์ไปยังไฟล์ใน A จากนั้น du ของ A และ du ของ B จะกลับคำตอบเดียวกัน - ขนาดของไฟล์ที่มา จาก A แต่ตอนนี้ไฟล์เหล่านี้ยังอยู่ใน B

สิ่งนี้ถูกต้องจริงเนื่องจากตัวอย่างเช่นถ้าคุณลบ A ไฟล์นั้นจะไม่ถูกลบบนดิสก์เพราะพวกมันยังคงถูกอ้างอิงโดย B. ด้วยฮาร์ดลิงก์ไฟล์ใดเป็นแหล่งที่มาและอันไหนคือฮาร์ดลิงก์ ค่อนข้างโดยพลการและไม่มีความหมาย

ผลิตภัณฑ์เช่น du จะแสดงรายการไดเรกทอรีพร้อมส่วนลดซ้ำซ้อน สิ่งนี้จะใช้งานได้หากไฟล์และฮาร์ดลิงก์ทั้งหมดอยู่ในไดเรกทอรีเดียว ผลิตภัณฑ์รายการโฟลเดอร์จำนวนมากทำเช่นนั้น

สรุป: ด้วยฮาร์ดลิงก์คำถามของ "ขนาดจริงที่ใช้ในไดเรกทอรี NTFS" นั้นไม่มีความหมาย


1

ฉันยังทำวิจัยเกี่ยวกับคำถามนี้ นี่คือผลลัพธ์ที่ฉันค้นพบ

ขนาดโฟลเดอร์ที่มีไฟล์ hardlinked ใน NTFS อาจมีการพิจารณาในสามความหมายที่แตกต่างกัน:

  1. ขนาดรวมถึงขนาดของไฟล์ฮาร์ดลิงก์ทั้งหมด (ซึ่งแสดงโดย WE)
  2. ขนาดของไฟล์ที่ไม่ซ้ำกันเฉพาะในแง่ของโฟลเดอร์ปัจจุบัน
  3. ขนาดของไฟล์ที่ไม่ซ้ำกันเฉพาะในแง่ของดิสก์ทั้งหมด

หมายเลข 2 คือสิ่งที่แสดงโดย TreeSize Professional ในแท็บ Details คอลัมน์ที่จัดสรรหากตัวเลือก "Track NTFS hardlinks" ถูกเปิดใช้งาน

นี่คือ exaple สำหรับโฟลเดอร์ winsxs (7.5Gb เทียบกับ 10):

ภาพ

การรับค่าหมายเลข 3 ยังคงเป็นคำถามสำหรับฉัน แม้ว่าฉันสามารถรับขอบเขตที่ต่ำกว่าโดยใช้ผู้บัญชาการรวมกับปลั๊กอิน NL_Info สิ่งที่ฉันได้คือขนาดที่ครอบครองโดยไฟล์ซึ่งมีฮาร์ดลิงก์หนึ่งลิงก์ (ไฟล์ที่ไม่ซ้ำ) มันเป็นประมาณ 5Gb สำหรับตัวอย่างที่กำหนด

ดังนั้นพยายามที่จะขยายคำตอบหรือพูดในคำอื่น ๆ


0

คุณสามารถใช้ln.exeเพื่อแสดง "ขนาดจริง" ของโครงสร้างไดเรกทอรี:

ln.exe --truesize z:\backups\.

มันจะตรวจหาฮาร์ดลิงก์ด้านล่างที่โฟลเดอร์เริ่มต้นเท่านั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.