1. 程式人生 > >如何破解mssql for linux 3.5G記憶體的限制

如何破解mssql for linux 3.5G記憶體的限制

在上有篇部落格中主要介紹瞭如何在CentOS 中安裝和配置mssql ,在安裝過程中遇到3.5G記憶體的限制,下面介紹如何去破解,

微軟釋出了SQLServer for Linux,但是安裝竟然需要3.5GB記憶體,這讓大部分雲主機使用者都沒辦法嘗試這個新東西 這篇我將講解如何破解這個記憶體限制 要看關鍵的可以直接跳到第6步,只需要替換4個位元組就可以破解這個限制

首先按照微軟的給出的步驟安裝和配置 https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-setup-red-hat

到執行/opt/mssql/bin/sqlservr-setup時可以看到這個錯誤

sqlservr: This program requires a machine with at least 3250 megabytes of memory.

按錯誤文字查詢訊息在哪個檔案裡面

[[email protected] ~]# cd /opt/mssql/bin/
[[email protected] bin]# grep -irn "3250"
[[email protected] bin]# grep -irn "megabytes of memory"
Binary file sqlpackage matches
Binary file sqlpackage matches
Binary file sqlservr matches
[
[email protected]
bin]# strings sqlservr | grep "megabytes of memory" %s: This program requires a machine with at least %zu megabytes of memory. [[email protected] bin]# strings sqlpackage | grep "megabytes of memory" %s: This program requires a machine with at least %zu megabytes of memory.

看來sqlservr和sqlpackage會檢測這個限制,並且這個限制是一個常量

查詢錯誤訊息的位置

[[email protected] bin]# hexdump -C sqlservr | less

找到這裡

0006baf0  72 69 6e 67 29 00 25 73  3a 20 54 68 69 73 20 70  |ring).%s: This p|
0006bb00  72 6f 67 72 61 6d 20 72  65 71 75 69 72 65 73 20  |rogram requires |

可以看到訊息在0006baf6的位置

查詢呼叫錯誤訊息的位置

[[email protected] bin]# objdump -C -S sqlservr | less

找到這裡

23940:       48 8d 35 af 81 04 00    lea    0x481af(%rip),%rsi        # 6baf6
   23947:       31 c0                   xor    %eax,%eax
   23949:       48 89 ca                mov    %rcx,%rdx
   2394c:       48 89 d9                mov    %rbx,%rcx
   2394f:       e8 6c e4 fe ff          callq  11dc0 <[email protected]>
   23954:       bf 01 00 00 00          mov    $0x1,%edi
   23959:       e8 e2 e1 fe ff          callq  11b40 <[email protected]>

判斷的函式在這裡

238e0:       55                      push   %rbp
   238e1:       48 89 e5                mov    %rsp,%rbp
   238e4:       53                      push   %rbx
   238e5:       48 83 ec 78             sub    $0x78,%rsp
   // 把這個函式接收的第二個引數放到rbx
   // 參考 https://en.wikipedia.org/wiki/X86_calling_conventions (System V AMD64 ABI)
   238e9:       48 89 f3                mov    %rsi,%rbx
   // 呼叫sysinfo獲取記憶體大小
   // rdi是第一個引數,是一個在堆疊中的struct sysinfo
   // 參考 https://linux.die.net/man/2/sysinfo
   238ec:       48 8d 7d 88             lea    -0x78(%rbp),%rdi
   238f0:       e8 3b e3 fe ff          callq  11c30 <[email protected]>
   // 偏移量的計算如下
   // -0x78: uptime (struct sysinfo的開頭地址)
   // -0x70: loads[3]
   // -0x58: totalram
   // -0x50: freeram
   // -0x48: sharedram
   // -0x40: bufferram
   // -0x38: totalswap
   // -0x30: freeswap
   // -0x28: procs (short為什麼佔8個位元組?看https://en.wikipedia.org/wiki/Data_structure_alignment)
   // -0x20: totalhigh
   // -0x18: freehigh
   // -0x10: mem_unit (同樣,int 4個位元組 align 4個位元組)
   // 計算出rax = totalram * mem_unit
   238f5:       8b 45 f0                mov    -0x10(%rbp),%eax
   238f8:       48 0f af 45 a8          imul   -0x58(%rbp),%rax
   // 如果rax小於rbx則跳到23909,即顯示記憶體不足並退出
   238fd:       48 39 d8                cmp    %rbx,%rax
   23900:       72 07                   jb     23909
   23902:       48 83 c4 78             add    $0x78,%rsp
   23906:       5b                      pop    %rbx
   23907:       5d                      pop    %rbp
   23908:       c3                      retq

呼叫判斷的函式的程式碼在這裡

// 這裡的第二個引數是3250000000,可以看到記憶體的限制值是一個常量
   // 0xc1b71080 = 3250000000
   1486a:       be 80 10 b7 c1          mov    $0xc1b71080,%esi
   1486f:       4c 89 e7                mov    %r12,%rdi
   14872:       e8 69 f0 00 00          callq  238e0

順道再用hexdump查詢一下有多少處地方用了80 10 b7 c1,結果是隻有一處

00014860  00 00 48 89 df e8 66 15  00 00 be 80 10 b7 c1 4c  |..H...f........L|
00014870  89 e7 e8 69 f0 00 00 0f  57 c0 0f 29 85 70 ff ff  |...i....W..).p..|

使用python修改程式碼 改條件判斷的jb或者改8010b7c1都可以,我這裡把8010b7c1改成更小的值0080841e(512M)

其實以上內容我是看不懂的,慚愧,直接複製貼上過來,大體意思應該是找出哪裡對記憶體進行了限制,下面的內容是主要的,所以我們如果看不懂的博友們可以直接使用下面的步驟進行破解,注意切換自己的mssql的bin目錄下 使用下面的命令:

[[email protected] bin]# mv sqlservr sqlservr.old
[[email protected] bin]# python
>>> a = open("sqlservr.old", "rb").read()
>>> b = a.replace("\x80\x10\xb7\xc1", "\x00\x80\x84\x1e")
>>> open("sqlservr", "wb").write(b)
[[email protected] bin]# chmod +x sqlservr

如果怕自己打字出錯,請直接複製貼上,然後再重新來過我們的安裝步驟 ./mssql -conf setup 就可以安裝成功了。

可以繼續替換掉sqlpackage中的限制值,但是不替換也可以使用

繼續配置sqlserver

[[email protected] bin]# /opt/mssql/bin/sqlservr-setup
[[email protected] bin]# systemctl status mssql-server

如果你執行完命令後沒有看到服務正常啟動,可能是之前的配置沒有成功導致的 刪除mssql的資料資料夾並重試即可

[[email protected] bin]# rm -rf /var/opt/mssql
[[email protected] bin]# /opt/mssql/bin/sqlservr-setup

正常啟動後可以看到

● mssql-server.service - Microsoft(R) SQL Server(R) Database Engine
   Loaded: loaded (/usr/lib/systemd/system/mssql-server.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2016-12-05 22:50:06 EST; 20s ago
 Main PID: 2625 (sqlservr)
   CGroup: /system.slice/mssql-server.service
           ├─2625 /opt/mssql/bin/sqlservr
           └─2638 /opt/mssql/bin/sqlservr

Dec 05 22:50:10 localhost.localdomain sqlservr[2625]: 2016-12-06 03:50:10.85 spid17s     Server is listening on [ 0.0.0.0 ...433].
Dec 05 22:50:10 localhost.localdomain sqlservr[2625]: 2016-12-06 03:50:10.87 Server      Server is listening on [ 127.0.0....434].
Dec 05 22:50:10 localhost.localdomain sqlservr[2625]: 2016-12-06 03:50:10.89 Server      Dedicated admin connection suppor...1434.
Dec 05 22:50:10 localhost.localdomain sqlservr[2625]: 2016-12-06 03:50:10.89 spid17s     SQL Server is now ready for clien...ired.
Dec 05 22:50:11 localhost.localdomain sqlservr[2625]: 2016-12-06 03:50:11.77 spid6s      Starting up database 'tempdb'.
Dec 05 22:50:12 localhost.localdomain sqlservr[2625]: 2016-12-06 03:50:12.02 spid6s      The tempdb database has 1 data file(s).
Dec 05 22:50:12 localhost.localdomain sqlservr[2625]: 2016-12-06 03:50:12.02 spid20s     The Service Broker endpoint is in...tate.
Dec 05 22:50:12 localhost.localdomain sqlservr[2625]: 2016-12-06 03:50:12.03 spid20s     The Database Mirroring endpoint i...tate.
Dec 05 22:50:12 localhost.localdomain sqlservr[2625]: 2016-12-06 03:50:12.09 spid20s     Service Broker manager has started.
Dec 05 22:50:12 localhost.localdomain sqlservr[2625]: 2016-12-06 03:50:12.14 spid5s      Recovery is complete. This is an ...ired.
Hint: Some lines were ellipsized, use -l to show in full.

啟動成功後使用微軟提供的命令列工具連線也可以,使用windows上的客戶端連線也可以 https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-setup-tools 下圖是2G記憶體上執行的mssql




相關推薦

如何破解mssql for linux 3.5G記憶體限制

在上有篇部落格中主要介紹瞭如何在CentOS 中安裝和配置mssql ,在安裝過程中遇到3.5G記憶體的限制,下面介紹如何去破解, 微軟釋出了SQLServer for Linux,但是安裝竟然需要3.5GB記憶體,這讓大部分雲主機使用者都沒辦法嘗試這個新東西 這篇我將講

破解SQLServer for Linux預覽版的3.5GB內存限制 (RHEL篇) 轉

short https 安裝 his isa wiki pri start section https://www.ancii.com/database/30842.html 微軟發布了SQLServer for Linux,但是安裝竟然需要3.5GB內存,這讓大部分

docker for linux(3)

rest stat .com sys daemon lvm2 odi inux centos7系統 Docker 使用步驟 1. 安裝docker準備 * 安裝虛擬機,配置centos7系統:uname -r 查看Linux內核信息。Docke

SQL Server On Linux3)——SQL Server 2019 For Linux 下載並部署示例資料庫

  接上文SQL Server On Linux(2)——SQL Server 2019 For Linux安裝過程細節研究 正所謂工欲善其事必先利其器,讀者可能也跟作者一樣很迫切希望瞭解和嘗試SQL Server On Linux及SQL 2019的各種新特性,不過為了走得

MWeb for mac 3.1.8 破解版 啟用註冊碼 — Markdown寫作工具

軟體介紹 MWeb for mac 是MacOS平臺上一款優秀的Markdown寫作工具,還可以書寫編輯筆記,生成靜態部落格,軟體內有可自定義的網站模板來根據使用者的喜好增加或減少一些功能。 MWeb所特有的文件庫模式及外部編寫模式,可以讓使用者在編輯筆記和生成部落格之間無縫自由切換。MWeb for m

Zoommy for mac 3.2 破解版 — 相簿神器

軟體介紹 Zoommy是一款集天地之精氣的免費相簿平臺,在Zoommy中使用者能夠找到源自幾十個線上免費相簿的 數十萬張高清圖片資源,這些圖片全部遵守CC0 和 Public Domain 協議,可以隨意使用這些圖片或個人使用,或商業使用都可以。 Zoommy for mac 3.2 破解版點選下載Zoo

Home Inventory for Mac 3.8.0破解版 — 家庭資產管理工具

軟體介紹 Home Inventory是Mac系統中的一款家庭資產管理工具,能夠快速簡單的記錄使用者的財產目錄,以便使用者日後的管理。建立一個完整的貴重物品目錄,並存儲有關物品的重要細節,如製造、型號、序列號、購買價格、價值等等,擺脫雜亂。保持有條理,把無限的照片、收據、產品手冊、保修單和日期標註放在一個地

【Mac軟體】9月11日最新版UltraEdit for mac 3.2.0.10免費破解版下載!!

http://www.mactech.cn/a/108.html 9月13日 補充: 有部分朋友反映下載後無法解壓,已經去掉了解壓密碼並已更新為zip格式,請大家放心下載,如果遇到無法使用或者下載解壓問題,請直接留言,謝謝 ————————————————————

破解StarUML3.01最新版 for Linux(Ubuntu16LTS)

原文地址:https://blog.csdn.net/yoyofreeman/article/details/80844739chmod +x StarUML-3.0.1-x86_64.AppImage ./StarUML-3.0.1-x86_64.AppImage --appimage-extract c

AweEraser for Mac 3.3破解版 — 資料清除工具

軟體介紹 AweEraser for Mac是Mac平臺上的一款資料清除工具,它可以安全永久地從硬碟/儲存介質中刪除資料,永久刪除Mac檔案,擦除硬碟,並刪除Mac OS下已刪除的資料。它還提供工具幫助使用者批量刪除Mac上的應用程式,清理瀏覽器歷史記錄、快取、隱私等。 AweEraser for Ma

Qt for Linux:樹莓派3配置Qt開發環境(Qt 5.9.1 和 OpenCV 2.4.13)

關於樹莓派 我用的是 樹莓派樹莓派3代B型 Raspberry Pi Model 3 B 我拿來是做監控視訊採集的,所以會用到 Qt 和 OpenCV 開發上,除了視訊採集和視訊檔案生成用的OpenCV,其他全部Qt 本篇文章只涉及樹莓派的配置,不涉及具

win7 32位系統記憶體限制破解支援到128G記憶體

  使用win7 32位的系統,很多使用者都是會遇到32位系統8G記憶體只能使用3.48GB記憶體可用。32位理論上最大也就3.75GB可用,但實際上也就3.25GB能夠正常使用,其他的就是拿來做快取了。   不過坑爹的是32位的系統最多隻能支援3G多的記憶體,現在很多

iSubtitle for Mac 3.2破解版 — 視訊編輯軟體

軟體介紹 iSubtitle for Mac是Mac平臺上的一款視訊編輯軟體、字幕工具。允許使用者為iPod、iPhone、iPad、Apple TV、iTunes或任何基於AVFoundation/ quicktime的播放器或應用程式建立字幕電影。它是第一個也是唯一一個充分利用蘋果軟字幕技術的應用程式。

pycharm專業版破解for linux

參考:  https://blog.csdn.net/xiaozhu2623/article/details/84583304   1. 下載專業版,我這裡下載了2018.3.3  https://www.jetbrains.com/pycharm/download/#sec

突破SecureCRT for Linux的30天使用限制

       SecureCRT可謂是交叉開發的一大利器,但其需要註冊,試用限制30天。        不過道高一次魔高一丈,總有破解之法,Windows下破解軟體多如牛毛,但在Linux下,還是得自己動手才能豐衣足食啊~~        其實很簡單,既然有30天的計數單元

Navicat for Linux破解方式

試用期到達後,cd到home目錄下,ctrl + H,顯示隱藏檔案與目錄,直接刪除home目錄下的隱藏資料夾 .navicat,則能繼續試用一個月。 目前最新版本是11.2.11,暫時沒有找到註冊碼,因為linux版本的navicat與其他版本的註冊碼不通用,以後如果可以找