Memindahkan file antara dua drive pada satu SSD - apakah akan disalin?

18

Saat memindahkan file dalam satu drive, file tersebut tidak disalin dan dihapus. Tabel yang merujuk ke file baru saja diperbarui. Dan sejauh yang saya tahu, itu tidak terjadi pada 2 drive pada HDD. Tetapi SSD berbeda, tidak ada ruang fisik yang didedikasikan untuk setiap drive. ( sumber )

Jadi pertanyaan saya adalah apa yang terjadi ketika sebuah file dipindahkan dari satu drive ke drive lain pada SSD yang sama, apakah byte disalin dan yang asli dihapus, atau beberapa tabel diperbarui, sehingga meremukkan SSD lebih sedikit?

Sudah ada pertanyaan rangkap di sini . Namun keduanya menjawab:

setiap partisi akan memiliki area fisik drive itu sendiri

dan

Mempartisi hard drive sebenarnya menunjuk wilayah fisik untuk setiap partisi. [dan dalam komentar:] SSD masih merupakan hard drive, hanya saja tidak memiliki disk.

Sejauh yang saya tahu itu salah. Lihat di sini .

Jadi, akankah seseorang yang tahu lebih banyak tentang SSD, tolong beri tahu saya jika mereka benar dalam penilaian meskipun ada kesalahan?

ispiro
sumber
14
Jawaban yang diterima ada benar: setiap partisi memiliki sendiri, sistem file independen. Setiap filesystem memutuskan sendiri bagaimana ia menggunakan blok yang ditugaskan padanya. Untuk melakukan apa yang Anda usulkan firmware SSD, filesystem (s) dan alat pengguna tanah seperti Linux mvharus bekerja sama, mencampur lapisan abstraksi sangat.
Kamil Maciorowski
2
@ Kamil: Jika OS menerapkannya, mvsebenarnya perlu melakukan lebih sedikit daripada yang saat ini dilakukan, saya curiga. (Yaitu, OS hanya perlu memastikan bahwa cross-filesystem rename () berhasil alih-alih gagal seperti yang terjadi saat ini.)
grawity
16
"2 drive pada [an SSD / HDD]" - Saya pikir Anda bermaksud mengatakan 2 filesystem atau 2 partisi pada satu SSD / HDD. Ingat bahwa "D" terakhir di kedua akronim adalah "Drive", jadi Anda mengatakan 2 drive dalam 1 drive, yang tidak masuk akal.
JoL
1
Ambil contoh dialog Manajemen Disk. Dikatakan Change Drive Letter and Pathsketika merujuk ke partisi / volume.
ispiro
4
@ Ispiro Apakah itu di Windows? Sepertinya cara yang mengerikan untuk membingungkan pengguna. Saya hanya bisa menebak bahwa mereka datang dengan istilah "Drive Letter" sebelum partisi drive di mana diimplementasikan, dan kemudian mereka akhirnya mewakili partisi drive sebagai "drive" mandiri. Jadi sekarang Anda dapat memiliki beberapa "drive" Windows yang mewakili partisi dari satu drive perangkat keras ...
JoL

Jawaban:

38

Sejauh yang saya tahu itu salah

Deskripsi yang dikutip setengah benar, setengah salah. Tapi itu juga setengah salah untuk HDD juga.

Mempartisi drive menunjuk wilayah logis untuk setiap partisi. OS sama sekali tidak peduli dengan lokasi fisik - ia hanya meminta drive untuk "membaca blok logis # 31415926" dan drive itu sendiri memutuskan di mana data berada. Ini bekerja dengan cara yang sama untuk memori magnetik dan flash.

Ini sebenarnya sama dengan HDD dari 20-25 tahun terakhir: meskipun sistem operasi awal menggunakan lokasi fisik silinder / kepala / sektor, itu sudah lama hilang sekarang. Anda tidak tahu persis di mana piring LBA # 1234 disimpan. HDD bahkan memetakan ulang sektor fisik yang buruk secara otomatis, sehingga LBA yang sama tiba-tiba dapat dibaca dari area fisik yang sama sekali berbeda - seperti halnya dengan SSD.

Jadi dengan HDD dan SSD, OS hanya memiliki kisaran LBA (mis. 0–999999) untuk membaca dan menulis data. Tujuan dari partisi adalah untuk mengalokasikan sub-rentang di dalamnya - misalnya partisi A mendapat 10-499999, partisi B mendapat 500000-999999. Setiap partisi memiliki sistem file independen, dan sistem file di dalam setiap partisi tidak dapat mereferensikan data di luarnya - mereka tidak dapat melewati batas partisi. (Misalnya, partisi A tidak dapat memiliki file yang datanya disimpan di sektor # 600000.)

Akibatnya, semua file yang bergerak dari satu ke yang lain harus disalin secara penuh.

(Yang mengatakan, secara teori OS mungkin dapat meminta disk itu sendiri untuk menggandakan data dari satu area ke area lain (mis. "Salin LBA # 1234 ke # 567890"), tanpa harus menyalinnya ke memori utama dan kemudian kembali, dan tentu saja ini akan benar-benar melewati batas partisi. Ini dapat menggunakan "lapisan terjemahan flash" SSD, misalnya. Tetapi dalam praktiknya, sejauh yang saya tahu, ini tidak dilakukan.)

grawity
sumber
Saya menganggap Anda benar. Namun, perhatikan bahwa ada adalah pilihan lain. Drive dapat memutuskan bahwa sektor # 001 pada drive # 1 sekarang akan beralih dengan sektor # 123 di drive # 2 (yaitu sektor # 001 pada drive # 1 sekarang akan merujuk ke data fisik yang dulu disebut sebagai sektor # 123 di drive # 2) dengan demikian memindahkan file tanpa harus menyalin byte. Jadi memindahkan TB data dapat pada prinsipnya berada di dekat-seketika.
ispiro
15
Drive tidak tahu tentang file atau sistem file, dan karena itu tidak dapat membuat keputusan seperti itu dengan sendirinya. Perlu menerima permintaan dari OS agar ini terjadi. Seperti yang telah saya sebutkan pada paragraf terakhir, secara teknis hal ini mungkin terjadi tetapi sistem operasi biasanya tidak repot dengan ini untuk salinan lintas-sistem file, dan saya ragu mereka juga untuk salinan sistem file yang sama (lebih umum dilakukan pada level FS).
grawity
6
SSD tertentu menerapkan de-duplikasi level blok. Misalnya, Sandforce ( en.wikipedia.org/wiki/SandForce#Technology ) adalah salah satu yang pertama menerapkan ini dan pengontrol mereka memasuki berbagai produk pabrikan SSD. Pengontrol Sandforce memiliki faktor "tulis amplifikasi" kurang dari satu - yang berarti mereka menulis lebih sedikit data ke penyimpanan flash daripada apa yang dikirim OS ke drive. Sebagai perbandingan, SSD umumnya memiliki faktor tulis amp yang lebih besar dari satu.
hojusaram
2
@hojusaram: Benar, tetapi masih deduplikasi pasca-factum - mengurangi menulis flash, tetapi data masih dibaca, disalin dari disk ke memori OS dan kemudian kembali ke pengontrol disk. Apa yang dimaksud dengan ispiro yang saya pikir setara dengan SSD dari "reflink" atau "copy on write" (mis. Cp --reflink) yang OS secara eksplisit dapat meminta disk untuk melakukan sendiri.
grawity
1
Akan menarik untuk mengetahui bagaimana APFS menangani hal ini, karena batas-batas partisi tidak lagi diperbaiki, mereka dapat berubah tanpa intervensi dari pengguna.
Tetsujin
9

Apa yang terjadi ketika data ditulis ke Solid State Disk layak untuk beberapa artikel (ringkasan yang baik di sini ), karena sangat rumit dan tergantung pada teknologi yang mendasarinya. Ceritanya adalah bahwa SSD secara umum tidak dapat menulis nol bit ke memori. Sebagai gantinya, mereka harus nol (menghapus) seluruh bagian memori, dan kemudian mereka dapat menyimpan data setelah itu dengan hanya menulis yang ke sana. Biasanya hari ini mereka menulis blok 512 byte tetapi menghapus halaman 8 blok yang 4096. Ini, dan fakta bahwa setiap siklus tulis / hapus menyebabkan beberapa keausan fisik memori dan memori akhirnya aus, membuat SSD sangat berbeda dari memutar HDD magnetik.

Selain itu, drive SATA (dan drive AFAIK SAS) tidak menerapkan perintah asli untuk menyalin data dari satu sektor ke sektor lainnya. (Atau setidaknya tidak ada dalam spesifikasi SATA atau SAS yang mengharuskannya, sehingga OS tidak dapat mengandalkan perintah yang tersedia.) Jadi salinan file melintasi partisi akan melibatkan pembacaan data dari satu sektor drive ke dalam memori host dan kemudian menulis kembali ke drive di sektor yang berbeda.

Ini karena sejauh menyangkut OS, drive adalah sekumpulan sektor logis bernomor, dan yang dapat dilakukan hanyalah membaca dari sektor dan menulis ke sektor. OS tidak dapat memberi tahu drive untuk memetakan kembali sektor.

Selanjutnya, sistem file (HFS +, NTFS, ext3, dll.) Adalah seperangkat struktur data yang memaksakan urutan pada serangkaian blok logis. Struktur data tersebut mengimplementasikan "file", "nama file", "direktori", "izin", dll. Jadi, ya, ketika Anda memindahkan file dari satu direktori ke direktori lain, itu tidak disalin; hanya data sistem file yang menunjukkan direktori mana file tersebut diperbarui.

Konsep partisi adalah bahwa ia adalah sekumpulan sektor logis pada drive yang diklaim oleh sistem file tunggal. Sebagai akibatnya adalah bahwa sistem file mungkin tidak mengakses sektor di luar partisi-nya. Sebagian besar ini adalah fitur keselamatan, tetapi juga mengalir dari fakta bahwa struktur data sistem file dibangun berdasarkan akuntansi untuk setiap sektor drive di bawah kepemilikan sistem file, dan tidak mudah untuk menambah atau menghapus sektor. untuk struktur tersebut. Inilah sebabnya mengapa Anda harus menjalankan rutinitas khusus untuk menyesuaikan ukuran partisi dan juga mengapa sistem file bersikeras untuk menjalankan sektor sektor yang bersebelahan.

Jadi tidak praktis dan berbahaya untuk mengimplementasikan salinan file hanya sebagai transfer sektor dari satu sistem file ke yang lain. Pada drive magnetik berputar, itu juga akan menjadi mimpi buruk kinerja, karena meskipun drive akan membuat pengecualian untuk bad sector, secara umum ia mengatur agar sektor-sektor yang secara fisik terletak sedemikian rupa untuk mengoptimalkan kecepatan baca dan tulis berurutan yang dinomori secara berurutan. sektor.

Selain itu, 2 sistem file mungkin tidak menyimpan data file dengan cara yang sama pada disk, artinya bertukar sektor tidak akan berfungsi meskipun itu praktis. Bahkan jika mereka adalah tipe sistem file yang persis sama, katakanlah NTFS, yang satu mungkin menggunakan enkripsi atau kompresi dan yang lainnya tidak, atau keduanya dapat mengenkripsi data, tetapi dengan kunci yang berbeda. Bukan suatu persyaratan bahwa data dalam file persis apa yang disimpan pada disk, semua yang harus disimpan adalah transformasi data yang dapat dibalik, sehingga sistem file dapat memperoleh data file dengan melakukan sesuatu dengan data pada disk. Jadi, kecuali kedua sistem file menggunakan transformasi yang sama persis, hanya menukar sektor tidak akan mencapai tujuan mentransfer data file.

Karena semua alasan ini, terlalu banyak kerja untuk keuntungan terlalu sedikit bagi penulis OS dan penulis sistem file untuk mengimplementasikan fitur yang mengoptimalkan perpindahan lintas partisi untuk SSD. Jadi setiap perpindahan lintas-partisi akan menjadi baca dan tulis.

Di dalam SSD, ceritanya sedikit berbeda. Meskipun OS tidak memberitahu drive itu menyalin data dari satu tempat ke tempat lain, menulis ke SSD sangat mahal (dan rumit) sehingga pengontrol SSD melakukan banyak pekerjaan untuk meminimalkan penulisan. Beberapa SSD melangkah lebih jauh dengan mencoba mendeteksi ketika sektor yang ditulis ke penyimpanan cocok dengan sektor yang sudah disimpan dan menandai bagian fisik dari memori yang sekarang memetakan ke 2 sektor logis yang berbeda daripada menyalinnya, melakukan pada tingkat drive internal apa yang OS tidak bisa.

Tapi jangan mengandalkan itu.

Pro tua
sumber
1
Bukankah paragraf terakhir Anda menyiratkan bahwa sistem file harus sama? Saya berasumsi SSD tidak tahu sistem file mana yang berjalan di atas. Jika misalnya satu partisi menggunakan kompresi dan yang lainnya tidak, salinan oleh SSD mungkin akan merusak file.
blablabla
@blablabla Paragraf terakhir mengasumsikan kedua sistem file menyimpan isi file aktual pada disk tanpa perubahan. Saya membuatnya eksplisit sekarang.
Old Pro