当唐朝费了九牛二虎之力平定了薛举,正踌躇满志地准备再次兵发洛阳,进而平定天下之际,却突然挨了当头一棒。在马邑安分了近两年的刘武周突然向李渊的老巢山西发起了进攻。李渊成也突厥败也突厥,之前与突厥交好牵制得刘武周不敢妄动,谁知现在一看李渊真的有希望一统天下了,突厥立马就支持刘武周向李渊实施暗算。
武德二年(619)三月二十二日,刘武周兵发太原。四月初便抵达黄蛇岭(今山西榆次北),开始向太原东面的军事要地榆次发动进攻。此时太原的军事统帅为李渊的四儿子、当时的并州总管李元吉。李元吉没什么政治才能,他在太原最爱干的就是打猎,号称“我宁三日不食,不能一日不猎”。还喜欢玩恶作剧,拿弓箭当街射人,以把人吓得狼狈躲避为乐。当刘武周打来的时候,他倒是想出了一个天才的点子,居然让车骑将军张达仅仅率一百名步兵出战,也不知道这位张达平时是怎么得罪了李元吉的,这简直就是要他去送死。当然张达不去还不行,否则的话立时就要死了,一战之下唐军自然全军覆没。张达愤而投降,并主动给刘武周当向导攻陷了榆次。
四月十八日,刘武周率兵包围太原,李元吉出城反击,获得了一定的战果,使得刘武周围城之兵后退。此时李渊也反应了过来,下诏令太常卿、行军总管李仲文率兵解围。而刘武周为了阻击唐军援兵,对太原围而不攻,分兵攻陷石州(今山西离石),杀刺史王俭,五月二十日又攻陷了平遥。六月,宋金刚因为被窦建德击败而投奔刘武周,刘武周获此大将之后大喜过望,不但封之为“宋王”,还将一半家产赐给他。而宋金刚,为了获取刘武周的信任,将自己的老婆给休了,重新娶了刘武周的妹妹,二人变成了一家人。于是刘武周军攻势更加凶猛,与唐军援军李仲文和左武卫大将军姜宝谊于雀鼠谷大战,刘武周部将黄子英伪败设伏,将唐军一举击败。此后刘武周又继续攻陷了山西的各个重要城市,太原已经渐渐陷入被合围的境地。
此时一直没有什么作为的李渊重臣之一裴寂主动请缨平刘武周。可是此人从李渊晋阳起兵之始就显现出他不是搞军事的料子,因此被宋金刚打得几乎全军覆没,太原方面失去了后方增援的指望。九月十六日,刘武周开始对太原进行总攻,李元吉大义凛然地对部将刘德威说:“你率领老弱守城,我率领精锐出战。”当时把刘德威感动得不行。结果李元吉当晚的确是出城了,但不是出城作战,而是带着一家老少金蝉脱壳,溜之大吉,太原沦陷。刘武周于是将主力部队交付给宋金刚,让其继续西进,接连攻陷晋州(治今山西临汾)、龙门(今山西河津东南)。十月,宋金刚占浍州(治翼城,今属山西)。夏县(今夏县西北禹王城)人吕崇茂与占据蒲州(治河东,今山西永济西南蒲州镇)的隋旧将王行本也起兵响应刘武周,整个河东地区几乎全部失陷。祸不单行,山西失陷之后,唐朝在河北的军团也被窦建德击灭,而南方的萧铣又将湖北一带的唐军打得抬不起头来。对于唐朝来说,已经到了“山西危急!河东危急!关中危急!”的紧要关头了。李渊甚至萌生了放弃河东,死守潼关的念头。当然这样一来,关中的确暂时可以保全,但是刘武周必然会坐大,新兴的唐朝在各路割据势力面前号召力势必会大减。此外,刘武周的地盘与王世充和窦建德的接壤之后免不了会互相勾结,又会增大唐朝统一的难度。此时又是李世民主动请缨,要求率军对抗刘武周,号称给他三万精兵就能扫平刘武周。平定薛秦势力彰显了李世民的战争天赋,他的话对李渊来说分量很重。李渊考虑之后感觉的确如李世民所说的,太原是根基所在,绝不能失,因此将关中大部分的机动兵力都调给了李世民,任命他为总帅再次出征。
武德二年(619)十一月十四日,李世民率军从龙门(今山西河津)趁着黄河结冰期顺利渡过黄河,于绛州西南的柏壁(今山西新绛西南)屯兵,与宋金刚部相持。刘武周军横扫河东之后大肆抢劫,给当地百姓造成了深重的苦难,当地的地主豪强也同时遭了殃,损失巨大。于是势力强大的地方地主豪强们纷纷结寨自保,以对抗刘武周。唐军到达柏壁之后后勤供给开始出现了问题,但是李渊当年从太原进军关中的时候一路群众工作做得非常好,唐军一路纪律严明、秋毫无犯,因此李世民发布通告进行号召的时候一呼百应,不但有大批的青壮主动投军,还有地方上的大户主动贡献军粮,让唐军很快便有了大量的粮食储备,人民的力量在这一刻彰显无遗。
俗话说“手中有粮,心中不慌”,李世民手上有了粮食之后,又开始玩深沟高垒、坚壁不出的招数。当然李世民也不是单纯地死守不出,他派了很多小分队去骚扰宋金刚的后勤线,比如让总管刘弘基率兵两千,由隰州(治隰川,今山西隰县)奔浩州(治隰城,今山西汾阳),截断宋金刚粮道,骚扰他的后方,慢慢跟宋金刚磨。
李渊也没闲着,他一边整顿关中的兵马钱粮,一边也继续派遣部队策应李世民。十二月二十五日,李渊派永安王李孝基、工部尚书独孤怀恩、陕州总管于筠、内史待郎唐俭等率军向夏县的吕崇茂发起攻击。吕崇茂立刻向宋金刚求救,宋金刚派遣手下大将尉迟敬德和寻相率兵援救。这位尉迟老兄可谓是隋唐年间人气值最高的几位超级猛将之一。他手下还有绝活,特别善于躲避敌人的马槊,还能反抢回来再捅回去。他一来就把唐军打得全军崩溃,首脑人物一股脑全做了俘虏。可是尉迟敬德毕竟只是个猛将,远不如李世民那般善于谋划。正当他洋洋得意地率部队返回浍州(治翼城,今属山西)时,李世民令兵部尚书殷开山等在其必经之路美良川(今山西闻喜南)早早设下了埋伏,把尉迟敬德打得大败。之后尉迟敬德又与寻相率兵援助蒲州的守将王行本,李世民率三千兵马夜袭,于安邑(今山西运城东北安邑)打得尉迟敬德几乎全军覆没,仅他和寻相两人逃脱。此时李渊也亲帅兵马到了蒲津关,李世民率轻骑参见,并再次确定作战的大方向。
此战胜利之后唐军气势高涨,纷纷要求与宋金刚决战,但是李世民并没有被胜利冲昏头脑,获得了李渊的首肯之后更是坚定了主动防守的原则,等待宋金刚军粮耗尽。就在李世民率军与宋金刚主力相持的时候,唐军小分队却四处出击,武德三年(620)正月,唐将秦武通击降蒲坂的王行本。
此时李世□虽然向窦建德投降,但却是身在曹营心在汉,根本没打算真的跟着窦建德。武德三年(920)正月,李世□在渐渐取得窦建德信任之后开始预备反叛。他开始准备趁窦建德渡河之机攻其军营,袭杀窦建德,然后救回父亲,玩一次漂亮的斩首行动。但是却正逢窦建德的妻子生产,窦建德一直没渡河,因此行动没能成功。之后李世□又与窦建德部将李文相结为兄弟,共谋袭杀窦建德归唐。但却因一个兽医侥幸逃跑而走漏了风声,导致行动失败。李世□无法,只能抛下父亲和郭孝恪率数十骑投唐。李世□这样做,换了一般的君王肯定是要把手上的人质杀掉才行,但是窦建德是个厚道人,反而说李世□是大大的忠臣,值得赞赏,居然把李世□的父亲给放了。老实说,在这件事情上窦建德厚道得有点过了分。