Не может быть такого универсального программного обеспечения, любят существует программное обеспечение дефрагментации для не жесткий диск SSD.
Причина состоит в том, что на не Жестком диске SSD, данные хранятся физически на известном месте. Путем знания адреса LBA данных, инструмент дефрагментации теперь, где данные находятся физически на жестком диске и могут переместить его, где он хочет. (это почти верно, но не во всем случае),
На SSD данные также хранятся в адресе LBA (это, как ATA/SATA работает). Но, в то время как традиционный жесткий диск будет (в большей части случая), хранят адрес LBA 1 в начале диска, сопровождаемого адресом 2, 3, 4..., N; SSD не сохранит адрес линейно, потому что хранение линейно было бы очень медленным, если Вы пишете в адресе 1 затем, позже, в адресе 2, потому что SSD должен будет переписать данные, хранившие в адресе 1 (это означает читать его, хранить его в кэше, стирание адресуют 1 к N (ssd должен записать, что целый блок N обращается каждый раз, когда Вы пишете данные)), запишите адрес 1 и 2. Это медленно). Это, почему SSD сохранит адрес 2 'далеко' (в пространстве памяти) от адреса 1. Это делает запись быстрее, но сделает диск медленнее, когда весь блок будет использоваться.
Так, инструмент не может знать, как данные хранятся на SSD и не могут решить, как сделать что-то как 'дефрагментация'. Единственный способ сделать это должно запустить программу в контроллерах жесткого диска, использовать инструмент, который может попросить, чтобы SSD сказал ему, как данные хранятся и говорят ему, как переместиться затем (использующий адрес внутренней памяти и не адрес LBA) (нет никакой стандартной команды ATA, чтобы сделать это, сделайте это означало бы 1 инструмент на поставщиков SSD. Я даже не знаю, могло ли быть возможно использовать такую собственную команду по протоколу ATA. (ДВОРНИК, может быть такой инструмент)), или используйте известную команду TRIM.
Через некоторое время Вы добираетесь, весь блок адреса N только с немногими обращаются используемый (потому что Вы удалили вещи и т.д.) и это начинает быть медленным, потому что каждый раз Вы пишете данные, блок должен быть считан, стерт, записать. Это, почему необходимо ОБРЕЗАТЬ для получения большинства блоков, полных данных и новых пустых блоков.
PS: Только, чтобы быть ясным, это - очень упрощенное объяснение. Также в большей части случая Вы не только запишете 1 адрес LBA данных, но многих (потому что файл является большим), так, чтобы Вы записали, что X блоков N обращаются, но получают блоки Xth, не полные зарегистрированный.
Если Вы на самом деле используете Bash и замену процесса поддержек AIX (которому я верю, зависимый платформы), это могло бы работать на Вас:
Демонстрация:
cat <(echo 'test')
Ваша команда:
sqlite3 test.db '.import '<(echo test)' test'
cat -
? Почему неecho 'test' > /tmp/blah
? – Paused until further notice. 9 June 2010 в 16:43