顯示具有 linux 標籤的文章。 顯示所有文章
顯示具有 linux 標籤的文章。 顯示所有文章

2023年7月7日 星期五

Ubuntu 20.04 + GT710 畫面撕裂

markdown 現在桌機配置是 ubuntu + GT710,在看影片時會有畫面撕裂的現象,用[這個影片](https://www.youtube.com/watch?v=MfL_JkcEFbE%EF%BC%89)就可以很清楚的觀察到,上網找了一下解法,在 Software & Update 的 addtional drivers 中可以發現 ubuntu 已經預設安裝了幾包的顯示卡驅動,不過預設使用的是 X.Org open source 的那一包,選擇 nvidia 470 proprietary 的那包驅動後,就沒有撕裂現象了

2022年10月28日 星期五

Ubuntu 上 USB 網卡斷線問題

markdown 家裡筆電換成 ubuntu 一段時間,最近原本用的好好的 USB 網卡突然開始瘋狂斷線,將網卡 off/on 後會回來,但是很快又開始斷。 花了好幾個小時,確認家裡分享器沒問題,網路沒問題,usb網卡沒問題,然後在[網上](https://askubuntu.com/questions/1044127/usb-ethernet-adapter-realtek-r8153-keeps-disconnecting)看到可能是因為網卡 driver r8152 不能 handle USB autosuspend,然後照著裡面解法,先裝好 tlp,然後在 tlp config `/etc/tlp.conf` 加上一行 `USB_BLACKLIST="0bda:8153"`,重開機,網路恢復了不再斷線。 其實從 windows 換成 ubuntu 後,三不五時就會發現一些小問題,然後就要花時間去查或避開,覺得有一句話真的說的對, Linux is free only if your time is free

檔案系統對硬碟容量的影響

markdown 手上有個空的 1T 隨身硬碟,原本是 NTFS 檔案系統,硬碟容量是 932GB,可用空間也是 932GB,後來格式化成 ext4 之後,硬碟容量變成 916GB,可用空間變成 870GB,容量的差距太大,所以就查了一下為什麼會有這個差別。 首先是空的硬碟為什麼硬碟容量跟可用空間不一樣,是因為 ext 檔案系統預設會保留 5% 的空間,當一些極端情況發生時,還有空間來讓一些特殊程式可以運作。 ![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-kfPWVbYnqOy3LMWJPHkmqlM2oMW4gs7SEAt6dUwQhvGCeYjfv2TarsdxCKTqnofcizY9qpeBHZMs7KO25aC-oVuTN10YgORN0Uq0WtNVtCfmnZ6aQEoEZf5Gwxl7TuR5_GIomoaqKFaBNe70yHmSUtxrqJXybc_w1pH_PfJu_RpGxFy7JRsYGybcEQ/s1600/2022-10-29_09-15.png =900x*) 這個保留空間可以關掉,在格式化時用 `-m 0` 參數就可以了。 再來看原本 932GB 怎麼在 ext4 上變成 916GB,因為 ext4 會預先將硬碟用到的 metadata ex: inode 保留出來,以 932GB 的硬碟來看,inode 大約就是 14GB,那 NTFS 應該就是沒有先把 inode 保留,所以才會有 932GB 可用空間。 --- [文件系统使用变长块的优缺点?](https://www.zhihu.com/question/51071915)

2021年12月29日 星期三

Raspberry Pi samba v1.0 設定

markdown 最近買了一台米家攝影機,一開始都是把錄好的影片從 SD 卡直接 copy 出來,後來覺得 SD 卡一直插拔實在太麻煩,想說之前有一台樹梅派閒置一直沒在用,就拿來當 NAS 讓攝影機直接將影片傳到樹梅派上吧。 米家攝影機是透過 SMABA 將影片上傳到 NAS,所以樹梅派只要安裝好 SAMBA 理論上就可以讓米家攝影機連上並上傳影片,但是問題是米家是用 SAMBA V1,這是非常不安全的舊版協議(小米還在用 SAMBA V1 會不會太落伍阿=.=),樹梅派 SAMBA 安裝好預設是不開啟的 V1 protocol,所以米家看到了樹梅派的機器但是連不上。 上網查怎麼 enable SAMBA V1,加了很多指令到 `/etc/samba/smb.conf` 裡面,像 `client min protocol=NT1`、`ntlm auth=yes` 等等,試了好一會才發現只要加一行 `min protocol=NT1` 就可以了,玩 linux 系統就是這樣,遇到疑難雜症免不了要花很多時間去解。 不過設定成功後,現在米家攝影機自動把影片傳到樹梅派上,之後就可以直接抓下來看了,方便許多。 ![](https://blogger.googleusercontent.com/img/a/AVvXsEiGM8wSFLzUD6wbQxI9zZZe4D4TwQfwvs6Bxxs-AC1ewWiEH8l93AVXQ1Led8G1de883qEnUzat6GxN5geUyJu2L6uXfifE1WEdETi1gv6vA4Aizp-ws8yPdeedpgq3xoZCtt9LBq2FXte2DdrghZRhLrVXvpxZXg1UW-pDEjFlESq0OpK5_XrAtLIZPw =400x*)

2019年11月21日 星期四

Linux SCP 無法使用問題

markdown 最近遇到一個問題是用 [.NET SSH library](https://github.com/sshnet/SSH.NET) 的 scp 想將檔案複製到一塊版子上時跳出 error,顯示 SCP not found,於是試著把環境變數印出來,結果發現 PATH 變數是空的。但是用 putty 登入之後卻又有 PATH 變數。查了資料才發現,shell 有 login/non-login、interactive/non-interactive shell 之分,而且不同設定的 shell 吃到的 profile 或是 bashrc 檔案是不同的。因此應該是在該版子上的 non-login 或 non-interactive shell,沒有去吃到正確的 profile 導致沒有 PATH 環境變數。 因為板子上的程式我無權修改,所以只能用迂迴的方法,在使用 scp 之前,先把板子上 scp 執行檔搬到預設登入的目錄,這樣就不會跳出 scp not found,可以順利將檔案 copy 進去了。

2019年7月1日 星期一

Block Size 與 Direct IO

markdown 在使用 direct IO 的時候,讀取/寫入的大小、buffer 的起始位置與檔案操作的 offset 需要是某個數值的整數倍,在 linux 2.4 之前,這個數值是 filesystem 的 logical block size,通常是 4K,在 linux 2.6 之後,這個數值是 device physical block size (device sector size),通常是 512 bytes。 block 在不同的語境可能會有不同的意思,容易造成混淆,在這邊解釋一下這兩個名詞的意思。 ### physical block 表示 device 本身一次能夠操作的最小單位,也有可能叫 device sector 或是 physical sector。 ### logical block 這個概念存在 linux filesystem 中,是 linux 一次 device 操作的最小單元,有時候叫 filesystem block、data block 或是直接就叫 block,logical block size 必須是 physical block size 的整數倍。 ### Advanced Format 原本 physical block size 幾乎都是 512 bytes,然而為了日漸增加的大檔需求,有些製造商推出了 4K physical block size 的儲存裝置。但不是所有 OS 與軟體都支援 4K physical block size,所以儲存裝置內的 firmware 支援一種功能,就是可以 export 出 512 bytes 的 "logical sector size" 給 linux (稱為 512e 格式),然後 firmware 內部將非 4K 對齊的 IO 操作轉換為 4K IO 操作。 若是 firmware 不使用模擬 512 bytes 模式而使用原生 4K,則稱為 4K native device,不過這要作業系統跟系統上軟體也支援才行,否則可能會遇到奇奇怪怪的問題。而 512e 與 4K native 這些新的格式與概念就是 [Advanced Format](http://idema.org/?page_id=2153) 在 512e 格式下出現的 logical sector size 與先前提到的 logical block 很容易造成混淆,在這裡我認為這兩個講的不是同一件事,一個是存在 linux filesystem 的概念,一個是存在儲存裝置內的概念,對於 512e 格式的儲存裝置,從 linux 系統的角度來看,裝置的 physical block size 是 512 bytes 的,雖然它實際上是 4K。 那對新式 4K physical block size 的儲存裝置,direct IO 要怎麼對齊?在 512e 格式的系統上,需對齊 512 bytes,但在 native 4K 的系統上,則需對齊 4K。要對齊哪個數字,可以經由查詢系統上的 logical sector size (不是 filesystem 的 logical block size) 得到,例如用 [ioctl](http://man7.org/linux/man-pages/man2/ioctl.2.html) 傳參數 BLKSSZGET。 當然查詢 physical block size 然後對齊它我覺得也是可以的,不過網路上的範例似乎都是查詢 logical block size 來作對齊,可能是因為這樣在 512e 裝置上可以對齊 512 bytes,對於對齊來說數字越小是越容易做到的。 *** Reference: * [Logical Block Size](https://docs.oracle.com/cd/E19455-01/805-7228/fsfilesysappx-9/index.html) * [I/O Limits: block sizes, alignment and I/O hints](https://people.redhat.com/msnitzer/docs/io-limits.txt) * [Support statement for 512e and 4K Native drives for VMware vSphere and vSAN](https://kb.vmware.com/s/article/2091600) * [Linux and 4K disk sectors](https://lwn.net/Articles/322777/) * [4K-sector drives and Linux](https://lwn.net/Articles/377895/) * [Linux on 4KB-sector disks: Practical advice](https://developer.ibm.com/tutorials/l-4kb-sector-disks/)

2017年7月9日 星期日

Linux IPC 機制 -- named pipe 與 unix domain socket

named pipe 與 unix domain socket 都是 Linux 上的 IPC 機制, 兩個機制都會在檔案系統上建立一個特殊的文件, 有時候可能會不確定這兩種機制的區別, 但其實兩者是有很多不同的地方

names pipe 是單向的傳輸資料, 但是 unix domain socket 可以雙向的傳輸資料, 如果想用 names pipe 雙向傳輸資料, 則需要兩個 names pipe

一個 unix domain socket 可以用來在很多個 process 中做資料傳輸, 一個 server process 可以在一個 unix domain socket 上同時接收很多的 client process, 若是 names pipe 則 server 跟每個 client 之間需要各自的 named pipe file

大致來說 unix domain socket 比 names pipe 擴充性更好, 但是若是簡單的場景中使用 named pipe 會更容易, 因為 unix domain socket 需要用 socket 系列 API 存取, 但存取 named pipe 就跟存取一般檔案一樣沒有分別

2017年4月15日 星期六

grep 出現 Binary file (standard input) matches

在用 grep 時出現 Binary file (standard input) matches 這個錯誤, 看起來像是從 standard input 讀到 binary file 所以不能做 grep, 但我很確定我是餵文字檔給它吃

後來發現加 -a 參數就可以掃 binary file, 用了之後發現是中文, grep 看不懂中文就會以為掃到 binary file

2017年1月21日 星期六

pietty 0327 不支援新的 ssh 加密方式

安裝了 ubuntu 16.04 版, 用 pietty 要連進去時出現這個畫面

 

看起來是 ubuntu 使用的加密方式 pietty 不支援, 換成最新的 pietty 0400 版就可以了

busybox -- embedded linux 的瑞士軍刀

在 embedded linux 與桌上型 linux 不同的是, 你通常不會有獨立的 bash shell 與各種好用的
command, embedded linux 還是可以提供你一個 shell 環境與少許的 command, 而這些都被
整合到一個叫 busybox 的執行檔裡

最近要在一塊板子上寫個簡單的 script, 裡面只有一個 for loop, 但 shell 一直告訴我語法錯誤
後來發現板子上不是在用 bash shell, 而是 busybox 提供的 shell 環境

餵狗後發現 busybox script 支援的語法少的可憐, 網路上有用 seq 跟 awk 來做 for loop 的範


這個人看起來對 busybox 諸多抱怨, 但老實說我覺得連 for loop 都不支援的 shell 真的有點爛
http://linux.byexamples.com/archives/549/bttb-looping-for-shell-script-under-embedded-linux/

http://microdevsys.com/wp/how-to-create-a-for-loop-to-print-a-sequence-or-range-of-numbers-on-dd-wrt-or-busybox-devices-linux/

2016年8月13日 星期六

linux live usb

要製作 linux usb 開機碟有兩種方法
一個是把 linux 安裝到 usb 隨身碟中
另一個就是製作 linux live usb

用Universal-USB-Installer可以很簡單的做出 linux live usb
網路上有很多教學文章
以前 live usb 雖然方便但是缺點是所有存在磁碟中的檔案或設定
重開機後都會消失不見
但是現在 linux live usb 已經可以讓使用者將檔案永久保存在usb碟中
最大支援到 4GB 的容量

在用Universal-USB-Installer製作live usb時有個 persistent file size的選項
設定好file size後做出來的live usb就可以將檔案永久寫入