EZLink SSD 安全抹除 secure rease
廠商已經倒了,找了一下有挖到他的原廠軟體,在這邊備份一下
切記不要使用 USB連接,以及有可能需要使用 IDE 模式 (我還沒抹除過先找來放)
本站建議搭配 Hover Zoom+ chrome 擴充套件,可自動放大圖片
( 站內文介紹: https://goo.gl/BnBSGa )
網站搜索不是很好用建議使用google底下括號內是範例,整串打進google搜索內;
[ site:https://charlottehong.blogspot.tw/ 你要搜索的內容 ]
建議使用官方提供的專屬軟體不要使用通用的安全抹除
磁碟管理(k)
對著你的第二顆硬碟的分割區按右鍵壓縮,壓縮出足夠的空間。覺得超級雷…SATA 要開 AHCI 比較好,要轉 IDE 模式還頗麻煩,之後抹除完畢還要轉回來。
文中的說法是會自動使用FF填滿整顆,但是問題是填滿的時候應該不是塞檔案而是從磁軌0填充FF到最後一軌(我是沒有實際照著做,但是從軟體的語意上看起來是這樣,這邊就假設是),或者是說沒辦法在我的電腦見到磁碟空間已滿,所以這與直接格式化會是一樣的意思。
如果不是的話,那這樣不對,因為根據 [1] 還是整顆都髒的,接著根據[2]到時候填0也沒辦法填整顆。
因為本來是整顆硬碟都不存在0,才要花時間找,現在是有部分是0所以測速變快了。
不過因為付出的代價還蠻大的,而且效率也不是很高,客觀來看不建議這樣做。
不過在這一點我是覺得沒有什麼特別情況或是必要性等等,也沒差拉就算給你安全抹除也只是短暫快一陣子~很快會寫滿整顆了
安全抹除的指令根據主控不同設計不同,指令會不一樣;有通用的安全抹除軟體,慎用~可能會導致硬碟被鎖住不能用。
https://www.ptt.cc/bbs/PC_Shopping/M.1495986776.A.CF8.html
不過他與前一章節提到的直接格式化最大不同在於,他需要再 IDE模式下才能工作,SSD的技術是建立在AHCI上的,不知道是不是因為這樣能夠干擾SSD的最佳化,進而真的從頭遍歷一遍。(這我不確定只是猜測~)
下面是相關知識說明,上面做完即可解決問題可以不用看另外這個現象我在2018的Win10還沒沒發生過,有可能是bug被修好了,也有可能是升級Win10版本導致的,有季度大更新建議重灌比較穩~
我的華碩Z97板子並沒有Ultra Fast,不過他可以手動選擇那些東西不檢測,結果是差不多意思的,手動把全部關了都不檢測;Ultra Fast是主機板廠商幫你設置好,廠商直接特化的會更快一些。
失敗都是有徵兆的,上一次關機會關超久,卡在黑畫面
都弄不好可以試試在開始搜尋復原,然後選擇保留資料。這個就相當於重灌,不過會幫你留著資料,原本設置是什麼就還好什麼完整保留,只重灌系統部分。
之前有一次大改版年度更新之後,我的快速啟動就修好了XD 回推這個方法可以試試看。
不過為了避免意外發生記得還是要先備份資料。
--max
中的 --
移除即可。/*****************************************************************
Name :
Date : 2018/03/21
By : CharlotteHonG
Final: 2018/03/21
*****************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int rand_int(int min, int max){
static int init=0;
if(init == 0){ srand((unsigned)time(NULL)), rand(), ++init; }
return (int)((rand() / (RAND_MAX+1.0)) * (--max - min + 1.0) + min);
}
int main(int argc, char const *argv[]){
for(unsigned i = 0; i < 10; ++i) {
printf("%d, ", rand_int(0, 10));
} printf("\n");
return 0;
}
/*****************************************************************
Name :
Date : 2018/03/21
By : CharlotteHonG
Final: 2018/03/21
*****************************************************************/
#include <iostream>
#include <random>
#include <ctime>
using namespace std;
template<typename T>
int randNum(int min, int max) {
static std::mt19937 generator(time(NULL));
std::uniform_int_distribution<T> distribution(min, --max);
return distribution(generator);
}
int main(int argc, char const *argv[]){
for(unsigned i = 0; i < 10; ++i) {
cout << randNum<int>(1, 10) << ", ";
} cout << endl;
return 0;
}
我查到的是 default_random_engine 是使用 minstd_rand0引擎,使用的是linear_congruential_engine
算法大致為 xi+1 = (16807xi + 0) mod 2147483647.
那個如果是用time(NULL)
我們假設目前time是137486376xxxx(x我不知道是多少不過沒差)
要生成數字為0 - 168070000經過測試第一筆亂數為
136956956xxxx * 16807 / 16807000 = 136956956
這時time為
第二次跑程式時測是為生成 0-168070000
137490578xxxx * 16807 / 16807000
由於生成的數字太小,time的前幾位數並沒有改變所以導致
第一個數字都會一樣
而事實上,當你生成的亂數max等於100000時
第一次的第一個數 : 77018
//間隔約3秒
第二次的第一個數 : 77021
可以發現只有各位數在改變而雖然microsoft 的定義是typedef mt19937 default_random_engine;但本質上用的引擎仍為mt19937,使用的是梅森算法(別問我是甚麼),所以不會有這問題
細節還是問其他懂的人吧
我以前用亂數時也發生過這問題所以我通常會用time(clock())
char str[][1] = {{1}};
printf("%p\n", str); // is address
printf("%p\n", *str); // is address
printf("%d\n", (int) *(char*)str); // is 1
char(*)[1] 型態
自動轉換成 (char**)型態
他們之間並不完全等價,前者是陣列後者是指針。(cahr**)
(cahr*)
, 由 (char**)
dereferance 而來。(char**) 轉換到 (char*)
1
對照一下表會是 49
。 char str[][1] = {{1}};
printf("%p\n", str); // is address
printf("%p\n", *str); // is address
printf("%d\n", (int) *(char*)str); // is 1
/*****************************************************************
Name : Timer.hpp
Date : 2017/12/19
By : CharlotteHonG
Final: 2017/12/19
*****************************************************************/
#pragma once
#include <string>
#include <ctime>
class Timer {
public:
Timer(std::string name=""): name(name){
startTime = clock();
}
operator double() {
return time;
}
public:
void start() {
startTime = clock();
flag=0;
}
void end() {
finalTime = clock();
time = (double)(finalTime - startTime)/CLOCKS_PER_SEC;
}
void print(std::string name="") {
if (flag==0) {
flag = 1;
end();
}
if(name=="") {
name=this->name;
}
if(priSta) {
std::cout << "#" << name << ", " << " time = " << time << "s" << std::endl;
}
}
private:
std::string name;
clock_t startTime;
clock_t finalTime;
double time;
bool flag = 0;
public:
bool priSta = 1;
};
Timer t;
t.start();
YourFun();
t.print("YourFun");
t.priSta=0;